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

标签 c# wpf mvvm

我在网上看到了一个示例教程,并看到了一个类的属性,它是为一个 wpf 项目编写的。我想知道这会用更简单的术语翻译成什么,因为我以前从未见过这样写的类(class)。

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

辅导类

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;
    }
}

最佳答案

我们必须查看 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);
    }

关于用简单的术语为 wpf mvvm 编写的 c# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235444/

相关文章:

c# - 如何防止用户共享同一帐户? (ASP.NET MVC)

c# - Func<T> 的性能和继承

ios - ReactiveX,关于移动应用架构和层

c# - 在 DataGridView 中选择一行并跟随行标题上的箭头

c# - SGEN : An attempt was made to load an assembly with an incorrect format

wpf - TabControl.Orientation?

wpf - 附加依赖对象被销毁\断开连接时的垃圾收集

c# - 如何在ListBox Wpf中添加项目之间的间距

c# - MVC 是特定于 Web 应用程序的吗?

android - 来自房间数据库的数据不会显示在回收站 View 中。可能出了什么问题?