如何在 MVVM 中绑定数据网格的选定项属性

本文关键字:网格 属性 数据网 数据 MVVM 绑定 | 更新日期: 2023-09-27 18:34:16

好吧,我正在使用 MVVM Light,我已经尝试了将事件选择中数据网格的选定项作为参数传递的解决方案已更改。所以我可以获取选定的项目,并且可以在视图模型中更新我的变量。

在最初的时刻,这是一个很好的解决方案。问题是,如果我在视图模型中将 SelectedIndex 属性设置为 -1 以取消选择全部或将 SelectedItem 属性设置为空,则不会触发事件 selectedChanged。我想这真的很好,因为为什么视图会通知视图模型在视图模型中第一时间更改的属性的更改?这不会创建循环,但是我需要手动清除视图模型中的 SelectedItems 属性并通知并引发我的事件 OnSelection更改为另一个视图模型对代码的许多部分的更改。

我想知道如何在更改视图模型中的属性时强制增加选择Chagend事件。也许解决方案可以是附加属性,而不是使用事件选择已更改。

我有哪些选择?

谢谢。

如何在 MVVM 中绑定数据网格的选定项属性

在选定项的 setter 中使用 RaisePropertyChanged。

private T _selectedItem;
public T SelectedItem
{
    get
    {
        return _selectedItem;
    }
    set
    {
        if(value != _selectedItem)
        {
            _selectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }
}

或者看看这个:INotifyPropertyChanged 已过时而这个:不带属性的数据绑定已更改

编辑:从 4.6 开始,有一个更漂亮的方法:

private T _selectedItem;
public T SelectedItem
{
    get
    {
        return _selectedItem;
    }
    set
    {
        if(value != _selectedItem)
        {
            _selectedItem = value;
            OnPropertyChanged();
        }
    }
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    => RaisePropertyChanged(propertyName);

CallerMemberName 用于隐式传递调用成员的名称。