当我修改数据网格项目中的值时如何处理事件?

How to handle the event when I modify value in the item of a datagrid?

我有一个数据网格。一列是一个复选框,我想在修改一行的复选框时处理。

我看过这段代码,乍一看它看起来是我要找的东西,但我有一些疑问。

public ObservableCollection<YourDataType> Items
{
    get { return items; }
    set { items = value; NotifyPropertyChanged("Items"); }
}

public YourDataType SelectedItem
{
    get { return selectedItem; }
    set { selectedItem = value; NotifyPropertyChanged("SelectedItem"); }
}

在视图模型构造函数中:

SelectedItem.PropertyChanged += SelectedItem_PropertyChanged;

在视图模型中:

private void SelectedItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    // this will be called when any property value of the SelectedItem object changes
    if (e.PropertyName == "YourPropertyName") DoSomethingHere();
    else if (e.PropertyName == "OtherPropertyName") DoSomethingElse();
}

我怀疑在构造函数中它订阅了 selected 项目的事件,但是当我 select 中的另一行时 selected 项目被改变了数据网格。那么它只订阅一次吗?到哪一项?

此外,selected 项在构造函数时为 null,所以我猜我会得到一个 null 错误。

所以我真的不确定这是否真的是一个好的解决方案,如果是,我不明白为什么它可以工作。

当数据网格中的一项 属性 发生变化时,还有另一种解决方案可以处理吗?但乍一看,这个解决方案似乎简单明了。

The solution is from here.

谢谢。

您必须在 SelectedItem 中附加和分离事件处理程序 属性 setter:

public YourDataType SelectedItem
{
    get { return selectedItem; }
    set
    { 
        if (selectedItem != null)
        {
            selectedItem.PropertyChanged -= SelectedItem_PropertyChanged;
        }
        selectedItem = value;
        if (selectedItem != null)
        {
            selectedItem.PropertyChanged += SelectedItem_PropertyChanged;
        }
        NotifyPropertyChanged(nameof(SelectedItem));
    }
}