WPF中的Datagrid绑定

时间:2011-04-27 20:00:02

标签: c# wpf xaml binding datagrid

我知道这已经被问到了,但我已经完成了开发人员建议的几乎所有内容。

<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>

我试图在模态对话框中显示此内容,并在模式对话框的构造函数中填充许可证列表。 但是仍然没有任何东西填充在数据网格中。

构造函数代码:

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; }
    }
}

你们是否认为与对象列表有关?

3 个答案:

答案 0 :(得分:31)

请不要将对象用作类名:

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; }
    }
}

您应该为此课程实施INotifyPropertyChanged,当然在Property setter 上调用它。否则更改不会反映在您的ui中。

您的 Viewmodel类/对话框类应该有Property列表的 MyObjectObservableCollection<MyObject>是要走的路:

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

xaml Itemssource中,您应将MyObject设置为Datacontext的集合。 (<DataGrid ItemsSource="{Binding Source=MyList}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> <DataGridTextColumn Header="Date" Binding="{Binding Date}"/> </DataGrid.Columns> </DataGrid> 必须是你的对话框类!)

{{1}}

答案 1 :(得分:21)

如果没有看到所述对象列表,我相信你应该绑定到DataGrid的ItemsSource属性,而不是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>

(这假设包含DataGrid的元素[UserControl等]具有 DataContext绑定到包含list集合的对象.DataGrid派生自{{ 1}},依赖于它的ItemsControl属性来定义它将行绑定到的集合。因此,如果ItemsSource不是绑定到控件的DataContext的对象的属性,则可能需要在DataGrid上设置listDataContext={Binding list} ...)

答案 2 :(得分:5)

尝试在后面的代码中执行此操作

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

另外请确保您的列表有效填充,如Blindmeis所述,永远不要使用已在c#中提供函数的单词。