内部对象属性更改时自动提升PropertyChanged

时间:2010-03-11 22:20:29

标签: c# wpf mvvm inotifypropertychanged

我有这样的场景

Class Parent 
{
    Property  A;
 }

 Class A 
 {
      Property X
 }

当X发生变化时,如何在属性A上获得PropertyChangedNotification?我不想在A级或任何破坏我脱钩的事件中引用“父母”。我基本上想要的是制作Parent.IsDirty==true。这是我的故事的一个非常简化的版本,我有几十个类像Parent,所以我正在寻找一些通用的方法来处理这个。

请注意,这不是实际代码。我得到了所有INotifyPropertyChanged实施。我只是想知道像RaisePropertyChanged("A.X")

这样的简单机制

2 个答案:

答案 0 :(得分: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"))
}

希望这会有所帮助...

答案 1 :(得分: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个对象和事件处理程序的外部帮助器