【问题标题】:Reduce WPF View Model boiler plate [duplicate]减少WPF视图模型样板[重复]
【发布时间】:2018-03-02 17:18:17
【问题描述】:

我在我的 WPF 应用程序的视图模型中多次重复了下面的代码模式。有没有什么快速简单的方法来减少它,而不是求助于面向方面的编程之类的?

private string _scriptExecutionStage;
public string ScriptExecutionStage
{
    get => _scriptExecutionStage;
    set
    {
        if (value != _scriptExecutionStage)
        {
            _scriptExecutionStage = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ScriptExecutionStage"));
        }
    }
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您可以 - 实际上 - 减少属性的样板代码。唉,这并非没有成本,这是从 ViewModelBase 类派生您的视图模型

    public class ViewModelBase : INotifyPropertyChanged
    {
        protected void SetValue<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
        {
            if (AreEqual(field, value))
            {
                return;
            }
    
            field = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    

    在您的ViewModelBase 类中,您可以定义SetValue 方法。基本上,您将引用传递给您的支持字段并使用此引用进行操作。逻辑保持不变。

    在您的财产中,您现在可以这样做

    public string ScriptExecutionStage
    {
        get => _scriptExecutionStage;
        set => SetValue(ref _scriptExecutionStage, value);
    }
    

    【讨论】:

      【解决方案2】:

      您可以在ViewModelBase 中创建一个SetProperty&lt;T&gt;(...)

          protected void SetProperty<T>(ref T propertyToSet, T value, [CallerMemberName]string propertyName=null)
          {
              if(!propertyToSet.Equals(value))
              {
                  propertyToSet = value;
                  PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        • 2016-01-12
        • 1970-01-01
        • 2021-09-22
        • 2020-06-02
        • 1970-01-01
        • 2016-09-22
        相关资源
        最近更新 更多