首页 > 解决方案 > 如何立即响应 Datagrid 中 Checkbox 引发的 PropertyChanged

问题描述

我有以下代码:

public class ViewModel
{
    private IServiceAccess _svcAccess;

     public ViewModel(IServiceAccess svcAccess)
     {
        _svcAccess = svcAccess;

     }

    public ObservableCollection<Item> ExistingItems
    {
        get
        {
            return new ObservableCollection<Item>(_svcAccess.GetExistingItems());
        }
    }

}

<DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
    <CheckBox IsChecked="{Binding Path=Ignore, UpdateSourceTrigger=PropertyChanged}" />
  </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

当用户选中该框时,我希望能够立即响应-我读过的所有地方都说它“更新源”,但是我该如何响应呢?我发现的唯一其他示例是相反的,即 ViewModel 中的更改会引发事件以通知 View。

目前,我的 ViewModel 中有一个 ObservableCollection 绑定到数据网格。Ignore 是我的 Item 对象上的一个字段,作为布尔值存储在数据库中。

我想要发生的是选中该框触发我可以在 ViewModel 中响应的事件。

注意 - 我打算将我的 EF 实体映射到 WPF 层的单独 VM 实体中,但被告知这是不必要的和过大的。

标签: c#wpfdatagrid

解决方案


在您的Item视图模型中,您有一个 property Ignore。在用户界面中单击复选框时,绑定将Ignore在视图模型中的属性上设置更改的值。在那里,您可以响应属性设置器中的更改。以下代码只是具有Ignore支持字段的属性的示例。

private bool _ignore;

public bool Ignore
{
    get => _ignore;
    set
    {
        if (_ignore != value)
        {
            _ignore = value;
               
            // Do Something here reacting to the changed checkbox state

            OnPropertyChanged(nameof(Ignore));
        }
    }
}

推荐阅读