请告诉我实现许多重复INotifyPropertyChanged的最佳方法。我有一个MainClass,它有10个子字段,每个子字段都有6个字段,并且当自己的值发生变化时,每个字段都必须触发属性更改。这是我的代码,但不起作用:
public class BaseModel
{
public string S1 { get; set; }
public string S2 { get; set; }
public string S3 { get; set; }
public string S4 { get; set; }
public string S5 { get; set; }
public string S6 { get; set; }
}我使用一个名为ViewModelBase的类来实现INotifyPropertyChanged。在第二步中,使用类实现重复的INotifyPropertyChanged:
public class ImplementBaseModel : ViewModelBase
{
private readonly BaseModel _baseModel;
public ImplementBaseModel()
{
_baseModel = new BaseModel();
}
public string S1
{
get { return _baseModel.S1; }
set
{
if (_baseModel.S1 == value)
return;
_baseModel.S1 = value;
base.OnPropertyChanged("S1");
}
}
public string S2
{
get { return _baseModel.S2; }
set
{
if (_baseModel.S2 == value)
return;
_baseModel.S1 = value;
base.OnPropertyChanged("S2");
}
}
// other code...
}然后,一个模型有10个这类:
public class MidClass
{
public ImplementBaseModel ImplementBaseModel1 { get; set; }
public ImplementBaseModel ImplementBaseModel2 { get; set; }
// other field
public ImplementBaseModel ImplementBaseModel10 { get; set; }
public MidClass()
{
ImplementBaseModel1 = new ImplementBaseModel();
ImplementBaseModel2 = new ImplementBaseModel();
// ....
ImplementBaseModel10 = new ImplementBaseModel();
}
}好的,完成代码!现在请告诉我为什么有些房产在价值变化时不会被炒鱿鱼?是实现此代码的最佳方法吗?
发布于 2014-04-17 21:10:14
在你的策划者中,你从来没有真正地设置过这个值。使用:
public string S1
{
get { return _baseModel.S1; }
set
{
if (_baseModel.S1 == value)
return;
baseModel.S1 = value;
OnPropertyChanged("S1");
}
}请注意,我从base中删除了OnPropertyChanged。以这种方式调用PropertyChanged事件是不正常的。
NotifyPropertyChanged所做的就是使每个绑定都对其绑定属性执行"get“。如果备份字段从未更新,它们将只获得相同的数据。
发布于 2014-04-17 21:48:15
作为快捷方式,您还可以创建一个本地方法,如
bool UpdateAndRaiseIfNecessary( ref string baseValue, string newValue, [CallerMemberName] string propertyName = null)
{
if (baseValue != newValue)
{
baseValue = newValue;
OnPropertyChanged( propertyName );
return true;
}
return false;
}然后所有的策划者都是这样的:
set
{
this.UpdateAndRaiseIfNecessary( ref _baseModel.S1, value );
}https://stackoverflow.com/questions/23143462
复制相似问题