gpt4 book ai didi

c# - wpf 这些 View 模型类之间有什么区别?

转载 作者:行者123 更新时间:2023-11-30 20:40:37 25 4
gpt4 key购买 nike

我很想知道这两个类(class)选项之间的区别和/或好处。我已经在堆栈溢出上看到了几个 View 模型示例,并且经常看到下面的两个类示例。我不确定有什么区别。希望有人能解释为什么?什么时候使用一个而不是另一个?...谢谢。

类(class)选项#1

private ObservableCollection<Family> families;

public ObservableCollection<Family> Families
{
get { return families ?? (families = new ObservableCollection<Families>()); }
}

类(class)选项 #2

private ObservableCollection<Family> families; 

public ObservableCollection<Family> Families
{
get { return families; }
set
{
families = value;
NotifyPropertyChanged("Families");
}
}

它们应该合并吗?

public ObservableCollection<Family> Families
{
get { return families ?? (families = new ObservableCollection<Family>()); }
set
{
families = value;
NotifyPropertyChanged("Families");
}
}

最佳答案

第一个选项:

private ObservableCollection<TabItem> families;

public ObservableCollection<TabItem> Families
{
get { return families ?? (families = new ObservableCollection<Families>()); }
}

用于延迟实例化readonly 属性的支持字段。由于这里没有 setter,你永远不能给属性赋值,你只能读取值。

此方法可让您在需要时的最后一刻创建支持字段。如果这是数据绑定(bind)的,那么惰性实例化将被浪费,因为 View 将在创建期间查询属性值,这意味着支持字段将始终立即被实例化。

第二种选择

private ObservableCollection<Family> families; 

public ObservableCollection<Family> Families
{
get { return families; }
set
{
families = value;
NotifyPropertyChanged("Families");
}
}

允许读取写入 属性。由于可以为该属性分配一个新值,它必须调用 NotifyPropertyChanged 以便可以告知 View 值已更改。一旦 View 知道值已更改,它将通过从属性中获取新值来刷新自身。

在数据绑定(bind)属性的场景中,将两者结合起来真的只是浪费IMO。当分配 DataContext 并实例化支持字段时, View 将数据绑定(bind)到属性。

对于非数据绑定(bind)的属性,延迟实例化的行为由您决定。创建集合需要大量开销吗?在您提供的示例中,没有。但是,如果您要从其他一些数据源延迟创建它,那可能会有点昂贵,那么是的。

这真的取决于您试图用该属性解决的问题。

关于c# - wpf 这些 View 模型类之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com