如何: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
,不让它自动生成列,并显示这些列:
DataGridTextColumn
与 "Name"、non-editable.
DataGridTextColumn
和 "Specifics",可编辑(并显示默认值“-”)。
- 三个
DataGridCheckBoxColum
s 与 "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;设置;} 在字段上。
我必须在代码中执行整个操作,在 Whosebug 和亲爱的叔叔中花了两个时间后,我不知所措 google。
我有一个 class TestData:InotifyPropertyChanged
,其中包括一个 string
"Name"、另一个 string
"Specifics" 和一个 bool array
"checks"。这个class是用来建静态的Observablecollection
"testData"(小写).
我想通过代码创建一个 datagrid
,不让它自动生成列,并显示这些列:
DataGridTextColumn
与 "Name"、non-editable.DataGridTextColumn
和 "Specifics",可编辑(并显示默认值“-”)。- 三个
DataGridCheckBoxColum
s 与 "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;设置;} 在字段上。