如何:wpf datagrid 完全编程,包括绑定到 observablecollection

How to: wpf datagrid totally programmatical, including binding to observablecollection

我必须在代码中执行整个操作,在 Whosebug 和亲爱的叔叔中花了两个时间后,我不知所措 google。

我有一个 class TestData:InotifyPropertyChanged,其中包括一个 string "Name"、另一个 string "Specifics" 和一个 bool array "checks"。这个class是用来建静态的Observablecollection"testData"(小写).

我想通过代码创建一个 datagrid,不让它自动生成列,并显示这些列:

  1. DataGridTextColumn 与 "Name"、non-editable.
  2. DataGridTextColumn 和 "Specifics",可编辑(并显示默认值“-”)。
  3. 三个 DataGridCheckBoxColums 与 "checks" 数据。

结构 set-up 正确,并显示所需的 headers 和数据的占位符。有一个按钮可以将新记录添加到 "testData",并且确实向数据网格添加了额外的行,但遗憾的是这些都是空的。

显然,我需要这个 two-way。

我无法显示我在 "testData" 声明中为 "specifics" 和 "checks" 设置的值。

此外,我一直收到一条错误消息说 "two way binding requires Path or x:path"。令人沮丧...

这是我尝试过的:

<DataGrid x:Name="dgMainDataGrid" CanUserAddRows="False" AutoGenerateColumns="False" />

dgMainDataGrid.ItemsSource = testData;

DataGridTextColumn col1 = new DataGridTextColumn();
col1.Header = "col1Header";
col1.IsReadOnly = true;
col1.Binding = new Binding("Name");

DataGridTextColumn col2 = new DataGridTextColumn();
col2.Header = "col2Header";
col2.IsReadOnly = false;
col2.Binding = new Binding("Specifics");

DataGridCheckBoxColumn col3 = new DataGridCheckBoxColumn();
col3.Header = "col3Header";
col3.IsReadOnly = false;
col3.Binding = new Binding("checks[0]");


DataGridCheckBoxColumn col4 = new DataGridCheckBoxColumn();
col4.Header = "col3Header";
col4.IsReadOnly = false;
col4.Binding = new Binding("checks[1]");

DataGridCheckBoxColumn col5 = new DataGridCheckBoxColumn();
col5.Header = "col3Header";
col5.IsReadOnly = false;
col5.Binding = new Binding("checks[2]");

和class

public class TestData : INotifyPropertyChanged
{
public string Name;
public string Specifics;
public bool[] checks;
}

谢谢大家。

在@Clemens 询问我的 class 看起来如何后,我发现这些不是属性。洒一些{get;设置;} 在字段上。