Ligação Datagrid em WPF

Eu sei que isso já foi perguntado, mas eu fiz quase tudo o que é sugerido pelos desenvolvedores.

<DataGrid x:Name="Imported" VerticalAlignment="Top" DataContext="{Binding Source=list}"  AutoGenerateColumns="False" CanUserResizeColumns="True">
    <DataGrid.Columns>                
        <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}"/>
        <DataGridTextColumn Header="Date" Binding="{Binding Path=Date}"/>
    </DataGrid.Columns>
</DataGrid>

estou a tentar mostrar isto na caixa de diálogo modal e a popularizar a lista de licenças no construtor da caixa de diálogo modal. Mas ainda nada está a ser povoado dentro do datagrid.

Código do Construtor:

public diagboxclass()
{
    List<object> list = new List<object>();
    list = GetObjectList();
}

public class object
{
    string id;
    DateTime date;
    public string ID
    {
        get { return id; }
        set { id = value; }
    }
    public DateTime Date
    {
        get { return date; }
        set { date = value; }
    }
}
Vocês acham que tem alguma coisa a ver com a lista de objectos?

Author: Ramzi Kahil, 2011-04-28

3 answers

Por favor, não utilize o objecto como nome de classe:

public class MyObject //better to choose an appropriate name
{
    string id;
    DateTime date;
    public string ID
    {
       get { return id; }
       set { id = value; }
    }
    public DateTime Date
    {
       get { return date; }
       set { date = value; }
    }
}

Você deve implementar INotifyPropertyChanged para esta classe e, claro chamá-lo no setter de propriedade. Caso contrário, as alterações não se refletem na sua IU.

A sua classe/ janela de modelos de visualização deve ter uma Property da tua lista. ObservableCollection<MyObject> é o caminho a seguir:

public ObservableCollection<MyObject> MyList
{
     get...
     set...
}

No seu xaml deve colocar o Itemssource na sua colecção de MyObject. (o Datacontext tem de ser a tua caixa de diálogo classe!)

<DataGrid ItemsSource="{Binding Source=MyList}"  AutoGenerateColumns="False">
   <DataGrid.Columns>                
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
     <DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
   </DataGrid.Columns>
</DataGrid>
 28
Author: blindmeis, 2018-08-10 08:56:35

Sem ver essa lista de objectos, acredito que devas estar ligado à propriedade de DataGrid, não à sua DataContext.

<DataGrid x:Name="Imported" VerticalAlignment="Top" ItemsSource="{Binding Source=list}"  AutoGenerateColumns="False" CanUserResizeColumns="True">
    <DataGrid.Columns>                
        <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
        <DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
   </DataGrid.Columns>
</DataGrid>

(isto assume que o elemento [UserControl, etc.] that contains the DataGrid has its DataContext bound to an object that contains the list collection. O DataGrid é derivado de ItemsControl, que se baseia na sua propriedade ItemsSource para definir a colecção a que se liga as suas linhas. Portanto, se list não é uma propriedade de um objecto ligado ao seu o DataContext do control, você pode precisar definir tanto DataContext={Binding list} quanto ItemsSource={Binding list} no DataGrid...)

 19
Author: Dan J, 2011-04-27 20:13:44

Tente fazer isto no código atrás

   public diagboxclass()
   {
         List<object> list = new List<object>();
         list = GetObjectList();
         Imported.ItemsSource = null;
         Imported.ItemsSource = list;
   }

Certifique-se também de que a sua lista é efectivamente povoada e como mencionado por Blindmeis, nunca use palavras que já são dadas uma função em C#.

 4
Author: Schuere, 2012-11-06 15:37:34