WPF中的Datagrid绑定

ali*_*ce7 20 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>
Run Code Online (Sandbox Code Playgroud)

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

构造函数代码:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

bli*_*eis 32

请不要将object用作类名:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

你应该INotifyPropertyChanged为这个类实现,当然也可以在Property setter上调用它.否则更改不会反映在您的ui中.

您的Viewmodel类/ dialogbox类应该包含 Property您的MyObject列表.ObservableCollection<MyObject>是要走的路:

public ObservableCollection<MyObject> MyList
{
     get...
     set...
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中,DataGrid的ItemSource应该是:ItemsSource ="{Binding MyList}" (4认同)

Dan*_*n J 22

没有看到所述对象列表,我相信你应该绑定到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>
Run Code Online (Sandbox Code Playgroud)

(这假设包含DataGrid的元素[UserControl等]将 DataContext绑定到包含该list集合的对象.DataGrid派生自ItemsControl,它依赖于其ItemsSource属性来定义它将行绑定到的集合.如果list是未绑定到你的控件的DataContext的一个对象的属性,您可能需要同时设置DataContext={Binding list}ItemsSource={Binding list}在DataGrid中...)

  • @ alice7:您需要将该列表公开为公共属性并设置适当的DataContext,您应该阅读[this reference](http://msdn.microsoft.com/en-us/library/ms752347.aspx). (2认同)

Sch*_*ere 5

尝试在后面的代码中做到这一点

   public diagboxclass()
   {
         List<object> list = new List<object>();
         list = GetObjectList();
         Imported.ItemsSource = null;
         Imported.ItemsSource = list;
   }
Run Code Online (Sandbox Code Playgroud)

另外,请确保您的列表已有效填充,并且如Blindmeis所述,切勿使用c#中已赋予功能的单词。