【问题标题】:CheckBox not Updating when Source Changed源更改时复选框未更新
【发布时间】: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


【解决方案1】:

试试这个:

首先定义新的DataGridRow 样式来订阅PreviewMouseButtonDownEvent:

<Style TargetType="{x:Type DataGridRow}">
    <EventSetter Event="PreviewMouseLeftButtonDown"
                 HandledEventsToo="True"
                 Handler="PreviewDataGridRowClick"
                 ></EventSetter>
</Style>

和事件处理程序:

private void PreviewDataGridRowClick(object sender, MouseButtonEventArgs e)
{
    var datagridRow = (DataGridRow) sender;
    var underlyingVm = datagridRow.Item as YourVM;
    underlyingVm.IsChecked = !underlyingVm.IsChecked;

    e.Handled = true;
}

【讨论】:

  • 如果我能帮上忙,我宁愿不要在后面的代码中添加代码。据我了解,这只是我试图通过绑定实现的另一种方式,不是吗?我想找到解决我当前问题的方法,而不是找到替代方案!还是谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2019-02-02
  • 2020-08-11
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多