DataModel
myと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
。しかし、セット内のセットがwithViewModel
に戻ると、エイジアンが発火し、無限ループに陥ります。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));
}
}