【发布时间】:2010-04-19 20:18:05
【问题描述】:
这个问题可能看起来有点微不足道,但可能并非如此。我只是想知道以下两种情况中哪一种更适合间接财产通知,或者也许有更好的方法。
场景:
我有两个属性,第一个是一个叫做HoldingObject的对象,第二个是一个叫做IsHoldingObject的布尔值,如果HoldingObject == null则为假,否则为真。我只是想知道 IsHoldingObject 的最佳通知机制是什么:
案例 (A) - 通知 IsHoldingObject 从 HoldingObject 属性更改:
public class NotifyingClass1 : INotifyPropertyChanged
{
private object _holdingObject;
public object HoldingObject
{
get { return _holdingObject; }
set
{
if (_holdingObject != value)
{
_holdingObject = value;
NotifyPropertyChanged("HoldingObject");
// Notify from the property that is being checked
NotifyPropertyChanged("IsHoldingObject");
}
}
}
public bool IsHoldingObject { get { return this.HoldingObject == null; } }
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
案例 (B) - 通知 IsHoldingObject 直接从 IsHoldingObject 更改,通过将 HoldingObject 属性设置为 false 或 true:
public class NotifyingClass2 : INotifyPropertyChanged
{
private object _holdingObject;
public object HoldingObject
{
get { return _holdingObject; }
set
{
if (_holdingObject != value)
{
_holdingObject = value;
NotifyPropertyChanged("HoldingObject");
// 1) Set the property here
this.IsHoldingObject = _holdingObject != null;
}
}
}
private bool _isHoldingObject;
public bool IsHoldingObject
{
get { return _isHoldingObject; }
set
{
if (_isHoldingObject != value)
{
_isHoldingObject = value;
// 2) Notify directly from the property
NotifyPropertyChanged("IsHoldingObject");
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
我个人倾向于第一个,因为它需要的代码更少,但我不确定这样做是否值得推荐。如果有其他(更好的)方法,请告诉我。
谢谢!
【问题讨论】:
标签: .net wpf inotifypropertychanged