我有这样的场景
Class Parent
{
Property A;
}
Class A
{
Property X
}
当X发生变化时,如何在属性A上获得PropertyChangedNotification
?我不想在A级或任何破坏我脱钩的事件中引用“父母”。我基本上想要的是制作Parent.IsDirty==true
。这是我的故事的一个非常简化的版本,我有几十个类像Parent,所以我正在寻找一些通用的方法来处理这个。
请注意,这不是实际代码。我得到了所有INotifyPropertyChanged
实施。我只是想知道像RaisePropertyChanged("A.X")
答案 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个对象和事件处理程序的外部帮助器