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;
}
}
我们必须看到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;
}
也许这就是教程想要展示的?