WPF DataGridTemplateColumn - 触发的复选框物业器isChecked
我创建一个WPF DataGrid
控制与DataGridTemplateColumn
复选框应该具备哪些器isChecked属性设置为取决于DataTable
值真或假)...WPF DataGridTemplateColumn - 触发的复选框物业器isChecked
如果DataTable
行的值设置为,DataGridTemplateColumn
应该是true(选中)。否则,这将是假(未选中)...默认情况下,每一个新的行会被设置为真,但我不能这些CheckBox
行绑定到我的DataTable
值(这将是或)
我试过以下c#代码。当我完成UserControl版本并通过我的DataTable
循环以保存其值...但是,当我设置gridResultados.ItemsSource = dataTable.DefaultView显然不检查/取消选中我的CheckBoxes
,因为DataTable
列之间没有绑定值(1或2)和我DataGridTemplateColumn
...这是我最亲密的做法:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Value?" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="True" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked">
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<Trigger Property="Content" Value="1">
<Setter Property="IsChecked" Value="True"/>
</Trigger>
<Trigger Property="Content" Value="2">
<Setter Property="IsChecked" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 1);
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 2);
}
首先,我建议你不要在WPF使用DataTable
,因为我们通常在WPF使用EF时,DataTable
是是ADO.NET的一部分,它已经过时了,几乎不推荐使用。
对于你的问题,你有一些解决涉及绑定和触发器的问题。首先,隐含的DataContext
在这里是一个DataRowView
。它仅适用于DataTrigger
(不适用于Trigger
)。因此,您需要使用DataTrigger
代替侦听索引[4]
(引用第五列 - CheckBox列)。第二Style
你设置是错误的,它应该包装在CheckBox.Style
,使其明白,你设置为CheckBox
风格,而不是它的Content
。第三Style
触发器无法在本地设置IsChecked
(如在您的代码中),在这种情况下,模板触发器可以覆盖该触发器,但您也可以使用样式设置器为IsChecked
设置默认值True
。 这里是你应该有代码:
<DataGridTemplateColumn Header="Value?">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="IsChecked" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding [4]}" Value="1">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding [4]}" Value="2">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
<CheckBox.Style>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
BTW,我可以看到你使用事件处理程序来更新基础数据的价值。但是这不是MVVM的正确方法,几乎你需要的是绑定和相关的东西。不过那一部分是你的,你需要对此进行更多的研究。我认为这足以在这里结束这个问题。
你好金刚, 它工作正如我想。我会做一些研究,以提高我的知识和我的WPF项目......谢谢! –