源更改时CheckBox不更新

时间:2013-12-23 22:50:03

标签: c# wpf xaml checkbox datagrid

我还是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>

1 个答案:

答案 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;
}