我还是WPF / XAML的新手,所以请耐心等待......
我有一个包含三列的DataGrid:2个DataGridTextColumns和一个包含CheckBox的DataGridTemplateColumn。 DataGrid绑定到显示Field类型对象的集合。 CheckBox的IsChecked属性也绑定到ViewModel中的属性。
我希望能够实现的是,当单击一个Field,即DataGrid中的一行时,Field的相应CheckBox会被选中或取消选中。
我已经绑定到DataGrid的SelectedItem,并且可以检索单击的字段。然后我设置了#34; IsChecked"因此,该领域的财产。
但是,在重新绘制DataGrid中的行之前,CheckBox中的检查似乎不会出现(或消失)。也就是说,如果我向下滚动以使行消失在视图之外然后向上滚动到它,则检查将显示在CheckBox中。当设置了IsChecked属性值时,我正在引发一个INotifyPropertyChanged事件。
有人能够在这里建议可能出现的问题吗?
包含CheckBox的列的代码如下所示。
非常感谢任何想法/建议/帮助。
非常感谢。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="5" />
</DataTemplate>
</DataGridTemplateColumn>
</DataGridTemplateColumn>
答案 0 :(得分:1)
试试这个:
首先定义新的DataGridRow样式以订阅PreviewMouseButtonDownEvent:
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="PreviewMouseLeftButtonDown"
HandledEventsToo="True"
Handler="PreviewDataGridRowClick"
></EventSetter>
</Style>
和eventhandler:
private void PreviewDataGridRowClick(object sender, MouseButtonEventArgs e)
{
var datagridRow = (DataGridRow) sender;
var underlyingVm = datagridRow.Item as YourVM;
underlyingVm.IsChecked = !underlyingVm.IsChecked;
e.Handled = true;
}