作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个问题,我在 DataModel
之间陷入无限循环。和 ViewModel
与 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));
}
}
最佳答案
您可以检查该值是否相同并且不要更新它。这通常是 INotifyPropertyChanged
被实现。你解雇了OnPropertyChanged
仅当它 真的改变了。
public object SomeProperty
{
get
{
return SomeDataModel.SomeProperty;
}
set
{
if (SomeDataModel.SomeProperty != value)
{
SomeDataModel.SomeProperty = value;
OnPropertyChanged("SomeProperty");
}
}
}
关于c# - 如何为 INotifyPropertyChanged 接口(interface)创建自己的 PropertyChangedEventArgs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990801/
我是一名优秀的程序员,十分优秀!