我正在为一个简单的问题纠结。我有一个实现INotifyPropertyChanged
. 某些实例属性的 getter 使用静态属性,因此如果静态属性发生变化,它们的值可能会发生变化?这是一个简化的例子。
class ExampleClass : INotifyPropertyChanged
{
private static int _MinimumLength = 5;
public static int MinimumLength
{
get
{
return _MinimumLength;
}
set
{
if (_MinimumLength != value)
{
_MinimumLength = value;
//WHAT GOES HERE
}
}
}
private int _length = -1;
public int length
{
get
{
return (_length > _MinimumLength) ? _length : _MinimumLength;
}
set
{
var oldValue = (_length > _MinimumLength) ? _length : _MinimumLength;
if (_length != value)
{
_length = value;
var newValue = (_length > _MinimumLength) ? _length : _MinimumLength;
if (newValue != oldValue)
{
OnPropertyChanged("length");
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
显然,如果静态属性MinimumLength
发生变化,那么每个实例的属性length
也可能发生变化。但是静态属性应该如何指示实例可能发生的变化呢?它不能调用OnPropertyChanged
,因为那不是静态的。
我可以在所有实例的类级别保留一个列表,并在每个实例上调用一个方法,但不知何故,这感觉有点矫枉过正。或者我可以将静态属性拉到一个单例类中,但从逻辑上讲,它们存在于类级别。是否有一个既定的模式,或者我应该以不同的方式思考这个问题?