我目前正在使用MVVM,因为模型上的更改需要在WPF中触发INotifyPropertyChanged
的{{1}}。我寻求简短而好的解决方案。我的研究表明,自动属性不能单独触发OnPropertyChanged
。因此,我需要为每个Property添加其他字段。
我目前在我的抽象类中得到了一个ChangeProperty-Methode,它帮助我很多:
OnPropertyChanged
到目前为止,这项工作非常好,为我节省了很多时间。但我仍然无法使用自动属性。因此,仍然需要字段:
public abstract class PropertyExtension : INotifyPropertyChanged
{
protected void ChangeProperty<T>(T value, ref T field, [CallerMemberName] string property = "")
{
if ((value!= null) && (!value.Equals(field)))
{
field = value;
}
if (property != "")
{
this.OnPropertyChanged(property);
}
}
...
}
所以重点是:当我更改属性的类型时,我也必须更改字段。我的想法是将该领域改为动态:
private int _ItemNumber;
public int ItemNumber
{
get { return _ItemNumber; }
set { ChangeProperty(value, ref _ItemNumber); }
}
到目前为止这是有效的,我找不到任何错误。我的问题是:这是一个好习惯吗?我错过了什么吗?动态事件是一个不错的选择吗?它会影响性能吗?它会影响内存使用吗?
我的目标是拥有一个易于维护的代码,例如,只有所有 private dynamic _ItemNumber;
public int ItemNumber
{
get { return _ItemNumber; }
set { ChangeProperty(value, ref _ItemNumber); }
}
字段的部分类,以保持实际模型的清洁。需要任何反馈。
答案 0 :(得分:2)
我建议开始使用:PropertyChanged.Fody :)
https://github.com/Fody/PropertyChanged
这样,你的代码干净整洁 - 正如它所假设的那样:)
你理论上的MVVM模型将是:
public class ViewModel
{
public int ItemNumber { get; set; }
}
让PropertyChanged.Fody为你休息。