этот вопрос может выглядеть немного тривиальным, но это не так. Мне просто интересно, какой из следующих двух случаев лучше для косвенного уведомления собственности, или, возможно, есть еще лучший способ.
Сценарий:
У меня есть два свойства: первое - это объект с именем HoldingObject, второе - логическое значение с именем IsHoldingObject, которое имеет значение false, если HoldingObject == null, в противном случае оно равно true. Мне просто интересно, каков наилучший механизм уведомлений для 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, установив для него значение false или true из свойства HoldingObject:
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
}
Лично я склоняюсь к первому, потому что для этого требуется меньше кода, но я не уверен, насколько это рекомендуется делать. Дайте мне знать, если есть другой (лучший) способ.
Спасибо!