c#类,用简单的术语为WPF mvvm编写

本文关键字:WPF mvvm 编写 术语 简单 | 更新日期: 2023-09-27 18:18:34

我在网上看到了一个示例教程,看到了一个为wpf项目编写的类的属性。我想知道这将翻译成什么更简单的术语,因为我从来没有见过这样写的类。

我尝试的翻译是否正确?意思是它和辅导课做的事情一样吗?

课外辅导班的

public ObservableCollection<string> Directories
{
    get { return Get<ObservableCollection<string>>(); }
    set { Set(value); }
}

我试着猜测它会被写成

private ObservableCollection<string> _directories; 
public ObservableCollection<string> Directories
{
    get
    {
        return this._directories;
    }
    set
    {
        this._directories= value;
    }
}

c#类,用简单的术语为WPF mvvm编写

我们必须看到Get/Set实现来正确地回答这个问题,但我的猜测是这样做是为了提高代码的可读性。在MVVM属性中有两件事你经常看到:getter中的自动初始化和setter中的属性更改通知…

    private ObservableCollection<string> _directories;
    public ObservableCollection<string> Directories
    {
        get
        {
            // auto-initialize
            if (this._directories == null)
                this._directories = new ObservableCollection<string>();
            return this._directories;
        }
        set
        {
            this._directories = value;
            RaisePropertyChanged("Directories"); // INPC
        }
    }

如果对大量属性执行此操作,则会导致大量代码膨胀。我的猜测是,教程类中的Set和Get方法可能被用来自动实现这些功能,或者至少是类似的功能。下面的代码将为属性提供该功能,例如您发布的属性:

    private Dictionary<string, object> Properties = new Dictionary<string, object>();
    public T Get<T>([CallerMemberName] string propertyName = null)
    {
        if (!Properties.ContainsKey(propertyName))
            Properties[propertyName] = default(T);
        return (T)Properties[propertyName];
    }
    public void Set<T>(T value, [CallerMemberName] string propertyName = null)
    {
        Properties[propertyName] = value;
        RaisePropertyChanged(propertyName);
    }

简短的回答:不,它不是做同样的事情。

教程类描述了应该有两个这样的附加方法:

 private void Set(ObservableCollection<string> value)
 {
       //  do something
 }
 private T Get<T>()
 {
       //  do something
 }

下面的例子是你尝试猜测的自动属性版本:

public ObservableCollection<string> Directories
{
      get; set;
}

也许这就是教程想要展示的?