我的WPF应用程序中有一个datagrid - dgUserSession。 它包含3列,其中只有2个文本列与数据库绑定,第一列是手动创建的复选框。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="False" Name="userSelection" Checked="DataGridCheckBox_Checked" Unchecked="DataGridCheckBox_Unchecked"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Checked="chkHeader_Checked" Unchecked="chkHeader_Unchecked" Name="headerSelection">
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
我想迭代所有四个事件中的每一行状态
private void chkHeader_Checked(object sender, RoutedEventArgs e)
{
for (int i = 0; i < dgUserSession.Items.Count; i++)
{
}
}
但是在这次迭代过程中如何检查或不检查复选框? 我花了3个小时在护目镜,但没有结果。
提前致谢。
答案 0 :(得分:1)
在WPF中,总是最好以UI 所需的形式创建数据类型类。这样,我的意思是,您应该绑定到所有三列,而不是绑定到DataGrid
中三列中的两列的数据。如果将bool
属性添加到DataGrid
的每一行中显示的类中,则可以从该类访问Checkbox
的值。
如果您没有数据将自定义类型的集合绑定到DataGrid.ItemsSource
,那么我建议您这样做。只需创建一个类(实现INotifyPropertyChanged
接口)并为每列提供一个属性(在您的情况下为3)。然后数据将该类型的ObservableCollection
绑定到您的DataGrid.ItemsSource
属性:
public ObservableCollection<YourDataType> Items { get; set; }
...
然后在YourDataType
类的属性设置器中,每次更改任何值时,您都可以访问每个属性/列的值:
public someType SomeProperty
{
get { return someProperty; }
set
{
someProperty = value;
NotifyPropertyChanged("SomeProperty");
// each time this is changed, you have access to the other property values here
}
}
您还可以遍历集合以查找Checkbox
es:
foreach (YourDataType item in Items)
{
bool checkBoxValue = item.NewBoolProperty;
}