代码之家  ›  专栏  ›  技术社区  ›  Jobi Joy

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

  •  7
  • Jobi Joy  · 技术社区  · 15 年前

    Class Parent 
    {
        Property  A;
     }
    
     Class A 
     {
          Property X
     }
    

    我怎样才能得到一个 PropertyChangedNotification 当X改变时在属性A上?我不想在A级或任何破坏我脱钩的事件中提及家长。我最想做的就是 Parent.IsDirty==true . 这是我故事的一个非常简化的版本,我有几十个类,比如Parent,所以我正在寻找一些通用的方法来处理这个问题。

    INotifyPropertyChanged 实施。我只是想知道有没有像 RaisePropertyChanged("A.X")

    2 回复  |  直到 12 年前
        1
  •  8
  •   RoelF    15 年前

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

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

    希望这有帮助。。。

        2
  •  0
  •   armageddon    12 年前

    像这样的事情怎么样:

    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个对象和事件处理程序