C# MVVM中公共属性的实践

C# MVVM中公共属性的实践,c#,mvvm,allocation,inotifypropertychanged,C#,Mvvm,Allocation,Inotifypropertychanged,我目前经常使用MVVM,因为模型上的更改需要在WPF中触发INotifyPropertyChanged上的属性更改。我寻求简短而好的解决方案。我的研究表明,自动属性本身无法触发OnPropertyChanged。因此,我需要为每个属性添加其他字段。 目前,我在抽象类中获得了一个ChangeProperty方法,这对我有很大帮助: public abstract class PropertyExtension : INotifyPropertyChanged { protected void

我目前经常使用MVVM,因为模型上的更改需要在WPF中触发INotifyPropertyChanged上的属性更改。我寻求简短而好的解决方案。我的研究表明,自动属性本身无法触发
OnPropertyChanged
。因此,我需要为每个属性添加其他字段。 目前,我在抽象类中获得了一个ChangeProperty方法,这对我有很大帮助:

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 dynamic _ItemNumber;
    public int ItemNumber
    {
        get { return _ItemNumber; }
        set { ChangeProperty(value, ref _ItemNumber); }
    }
到目前为止,我还没有发现任何错误。我的问题是:这是一个好的做法吗?我错过什么了吗?动态事件是一个很好的选择吗?它会影响性能吗?它会影响内存使用吗?
我的目标是拥有一个易于维护的代码,例如,拥有只包含所有
私有动态
-字段的分部类,以保持实际模型的整洁。需要任何反馈。

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

这样,您的代码就干净整洁了——正如它所设想的那样:)

您的理论MVVM模型是:

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

让PropertyChanged.Fody为您做休息。

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

这样,您的代码就干净整洁了——正如它所设想的那样:)

您的理论MVVM模型是:

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

让PropertyChanged.Fody为您做休息。

为了回答您的问题,在私有字段中使用dynamic是可以的,这没什么错。而且它不会对你的应用程序的性能产生太大的影响。通过分部类将字段放入一个单独的文件可能会隐藏它们实际存在的事实,并且在几个月后回来维护项目时会让您感到困惑。我不会那么做的。正如Piotr所回答的,如果您想要简化模型/视图模型的代码,那么像Fody这样的框架可以为您提供。为了回答您的问题,在私有字段中使用dynamic是可以的,这没什么错。而且它不会对你的应用程序的性能产生太大的影响。通过分部类将字段放入一个单独的文件可能会隐藏它们实际存在的事实,并且在几个月后回来维护项目时会让您感到困惑。我不会那么做的。正如Piotr回答的,如果您想要简化模型/视图模型的代码,那么像Fody这样的框架可以为您提供。