我遇到了一个问题,我在 myDataModel
和ViewModel
with之间陷入无限循环PropertyChanged event
。
我的结构:
public class SomeDataModel : DataModelBase
{
public SomeDataModel()
{
}
public object SomeProperty
{
get
{
//
}
set;
{
//
OnPropertyChanged("SomeProperty");
}
}
public bool SomeMethod()
{
SomeProperty = SomeNewObject
}
}
public class SomeViewModel : ViewModelBase
{
public SomeViewModel()
{
}
public SomeDataModel SomeDataModel
{
get;
set;
}
public object SomeProperty
{
get
{
return SomeDataModel.SomeProperty;
}
set
{
SomeDataModel.SomeProperty = value;
OnPropertyChanged("SomeProperty");
}
}
}
两者ViewModel
和DataModel
实现INotifyPropertyChanged
。
然后我有一个listener
我ViewModelBase
的任何property
变化DataModel
:
private void DataModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyInfo toPropertyInfo = this.GetType().GetProperty(e.PropertyName);
PropertyInfo fromPropertyInfo = DataModel.GetType().GetProperty(e.PropertyName);
if (toPropertyInfo != null && fromPropertyInfo != null)
{
if (toPropertyInfo.CanWrite && fromPropertyInfo.CanRead)
{
toPropertyInfo.SetValue(this, fromPropertyInfo.GetValue(DataModel, null), null);
}
}
}
所以现在当. property
_ DataModel
_ 但是集合中的集合又回到了导致再次触发的原因,以无限循环结束。ViewModelBase
property
ViewModel
ViewModel
DataModel
OnPropertyChanged("SomeProperty");
- 有没有快速的解决方法来解决它?(注意:不能改变结构)
- 我是否能够创建自己的自定义类,继承自
PropertyChangedEventArgs
并仍然让我的INotifyPropertyChanged
操作正常工作?
我刚在想:
public class CustomPropertyChangedEventArgs : PropertyChangedEventArgs
{
public CustomPropertyChangedEventArgs(string propertyName, SomeEnum enumName)
: base(propertyName)
{
//Set enum
}
}
然后在OnPropertyChanged
我想使用新的CustomPropertyChangedEventArgs
并传递enum
我想使用的。
public void OnPropertyChanged(string propertyName)
{
CustomPropertyChangedEventArgs handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new CustomPropertyChangedEventArgs(propertyName, newEnum));
}
}