MVVM中公共属性的实践

时间:2017-08-03 14:52:32

标签: c# mvvm allocation inotifypropertychanged

我目前正在使用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); } } 字段的部分类,以保持实际模型的清洁。需要任何反馈。

1 个答案:

答案 0 :(得分:2)

我建议开始使用:PropertyChanged.Fody :)

https://github.com/Fody/PropertyChanged

这样,你的代码干净整洁 - 正如它所假设的那样:)

你理论上的MVVM模型将是:

    public class ViewModel
    {
        public int ItemNumber { get; set; }
    }

让PropertyChanged.Fody为你休息。