WPF DataGridTemplateColumn - CheckBox IsChecked属性的触发器

时间:2015-10-14 19:44:29

标签: c# wpf checkbox datagrid datagridtemplatecolumn

我正在使用DataGrid CheckBox创建一个WPF DataGridTemplateColumn控件,其中 IsChecked 属性设置为 true false 取决于DataTable值)...

如果DataTable行的值设置为 1 ,则DataGridTemplateColumn应为 true (已选中)。否则,它将 false (未选中)...默认情况下,每个新行都将设置为 true ,但我无法绑定这些{{1 }行到我的CheckBox值( 1 2

我尝试了以下c#代码。它在我完成UserControl版本并循环通过我的DataTable以保存其值时起作用...但是,当我设置 gridResultados.ItemsSource = dataTable.DefaultView 时,显然没有检查/取消选中我的{ {1}}因为DataTable列值(1或2)与CheckBoxes之间没有约束力...这是我最接近的方法:

DataTable
DataGridTemplateColumn

1 个答案:

答案 0 :(得分:0)

首先,我建议您不要在WPF中使用DataTable,因为我们通常在WPF中使用EF,DataTable是ADO.NET的一部分,它已经过时且几乎已弃用。

对于你的问题,你有一些事情需要修复涉及绑定和触发器。首先,这里每行的隐式DataContextDataRowView。它仅适用于DataTrigger(不适用于Trigger)。因此,您需要使用DataTrigger来监听索引[4](它引用第五列 - CheckBox列)。其次,您设置的Style是错误的,应将其包含在CheckBox.Style中,以使其了解您为CheckBox设置了样式,而不是Content。第三,Style触发器不能覆盖本地设置的IsChecked(如在您的代码中),在这种情况下,模板触发器可以覆盖它,但您也可以使用样式设置器来设置默认值{{1} } True。 以下是您应该拥有的代码:

IsChecked

顺便说一句,我可以看到你使用事件处理程序来更新底层数据的值。但对于MVVM来说,这不是正确的方法,你需要的几乎就是绑定和相关的东西。不过那部分是你的,你需要对此进行更多研究。我认为这足以结束这个问题。