【发布时间】:2014-01-12 04:36:18
【问题描述】:
我对 WPF/XAML 还是很陌生,所以请耐心等待...
我有一个包含三列的 DataGrid:2 个 DataGridTextColumns 和一个 DataGridTemplateColumn,其中包含一个 CheckBox。 DataGrid 绑定到一个显示字段类型对象的集合。 CheckBox 的 IsChecked 属性也绑定到 ViewModel 中的属性。
我希望能够实现的是,当单击一个字段,即 DataGrid 中的一行时,该字段对应的 CheckBox 变为选中或未选中。
我已绑定到 DataGrid 的 SelectedItem 并且可以检索单击的字段。然后我相应地设置字段的“IsChecked”属性。
但是,在重新绘制 DataGrid 中的行之前,CheckBox 中的复选似乎不会出现(或消失)。也就是说,如果我向下滚动以使该行消失在视图之外,然后向上滚动到该行,则检查将显示在 CheckBox 中。设置 IsChecked 属性值时,我将引发 INotifyPropertyChanged 事件。
谁能提出这里可能出了什么问题?
包含 CheckBox 的列的代码如下所示。
任何想法/建议/帮助将不胜感激。
非常感谢。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="5" />
</DataTemplate>
</DataGridTemplateColumn>
</DataGridTemplateColumn>
【问题讨论】:
-
IsChecked实际上是依赖属性还是触发 PropertyChanged 事件的属性?这对我来说看起来不错,所以我会仔细检查绑定本身。 -
IsChecked 只是一个标准属性,即不是依赖属性。应该吗?
-
不一定是这样,但您需要确保在 setter 中触发 PropertyChanged 事件。如果你不这样做,就没有什么可以告诉 Binding 值已更改。这是 DependencyProperty codeproject.com/Articles/18270/… 的页面,对于绑定到业务对象属性,请查看
INotifyPropertyChanged接口和 WPF。 -
您在此处提到的问题仅在将值设置为 IsChecked 属性时未正确触发 PropertyChanged 事件时才会发生。再次检查使用正确值正确触发的属性更改事件。
标签: c# wpf xaml checkbox datagrid