当内部对象属性发生更改时自动引发PropertyChanged

7

I got a scenario like this

Class Parent 
{
    Property  A;
 }

 Class A 
 {
      Property X
 }

当X发生改变时,我如何在属性A上获得PropertyChangedNotification?我不想在A类中引用“Parent”或任何破坏我的解耦事件。我想要的基本上是使Parent.IsDirty==true。这是我故事的非常简化版本,我有数十个像Parent这样的类,所以我正在寻找一些通用的方法来处理这个问题。
请注意,这不是实际的代码。我已经获得了所有INotifyPropertyChanged的实现。我只是想知道是否有像RaisPropertyChanged("A.X")这样的简单机制。
2个回答

8

您可以尝试在父类中注册propertychanged事件。在构造函数中,您可以订阅该事件:

public Parent()
{
    A.OnPropertyChanged += OnAPropertyChanged;
}

void OnAPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "X")
        if(PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs("A"))
}

希望这能帮到你...


我选择这个答案,但我觉得 MVVM 消息传递模式才是我要找的。 - Jobi Joy

0

我不知道这是否是最佳实践,但是:

这样的东西怎么样?

private Movie movie;
public Movie Movie
{
    get { return movie; }
    set
    {
        var oldProperties = typeof(Movie).GetProperties();
        foreach (var property in oldProperties)
        {
            if (property.GetValue(movie).GetHashCode() != value.GetType().GetProperty(property.Name).GetValue(value).GetHashCode())
            {
                RaisePropertyChanged(property.Name);
            }
        }

        movie = value;

    }
}

当然,你可以将它带到外部助手中,该助手接受2个对象和事件处理程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接