何时使用公共或私有财产
本文关键字:私有财产 何时使 | 更新日期: 2023-09-27 18:28:18
如果我有这样的类:
public class MyClass:INotifyPropertyChanged
{
private Visibility isVisible;
private ObservableCollection<string> names;
public Visibility IsVisible
{
get{ return isVisible;}
set { isVisible = value; OnPropertyChanged("IsVisible");}
}
public ObservableCollection<string> Names
{
get { return names;}
set { names = value; OnPropertyChanged("Names");}
}
//ctor
public MyClass(){
names = new ObservableCollection<string>();
}
//INotifyPropertyChanged implementation
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在任何人斩首我之前——我已经做了相当多的查找,并找到了混合的答案......
我是否修改
public
或private
属性/变量以在绑定中使用? 即我有一个问题,即添加到names
集合将触发OnPropertyChanged
而更改isVisible
不会触发OnPropertyChanged
。我的假设是,这是因为names
是一个ObservableCollection
,而isVisible
不是,但我不确定......如果我应该使用
public
属性 - 拥有私有属性的必要性是什么?
您不需要私有属性,只需私有字段就足够了,因此请替换:
private Visibility isVisible {get; set;}
跟
private Visibility isVisible;
如果我应该使用公共属性 - 需要什么 有私人的吗?
不能将自动属性与 INotifyPropertyChanged 一起使用。这就是为什么您需要为您的财产IsVisible
提供一个支持字段。
请参阅:实现 INotifyPropertyChanged 的优雅方法
所以我认为你混淆了属性和字段(又名变量(。
public class Example()
{
public int FieldExample;
private int _propertyExample;
public int PropertyExample
{
get
{
return _propertyExample;
}
set
{
_propertyExample = value;
}
}
}
在简单的使用方案中,字段和属性之间的差异并不明显。 但是属性在引擎盖下有不同的管道,允许它们利用反射和绑定。 对于 WPF,这意味着您必须具有公共属性。 公共属性的最佳做法是将其与私有(或受保护(字段相关联 - 该字段名称通常以 _ 和/或以小写字符开头。 这称为"后备场"。
私有支持字段保存实际数据,公共属性只是其他类可以与该数据交互的方式。 在 get 和 set 块中,您可以放置任何您想要的代码:我可以输入:return 5;
. 这没有用,而且这种做法很差,但我可以。 通常,驻留在 get 和 set 块中的代码仍应设置或获取值;尽管您可以先验证输入,和/或先设置其格式。 在 WPF 集中实现的模式会引发属性已更改的事件。 程序的其他部分正在侦听该事件,以便它们知道要更新 UI。
因此,在代码中,如果仅更改支持字段而不引发已更改的事件,则 UI 将不会更新。 如果要对对象执行复杂的操作,并且希望推迟执行 UI 更新,直到完成整批项目,则可能需要此行为,但这是一种优化,对于初学者来说,最好始终访问/设置公共属性。