如何在集合对象上强制 NotifyPropertyChanged
How to force NotifyPropertyChanged on a collection object
我有一个 class ,其中我通常定义一个 属性 如下:
public class MeasurementPoint : ModelBase
{
private double _value;
public double Value
{
get { return _value; }
set
{
_value = value;
NotifyPropertyChanged();
}
}
}
接下来我创建了一个包含许多 'MeasurementPoint' 对象的集合。我想在满足特定值逻辑的每个对象上引发 notifyPropertyChanged。
目前此方法有效,并且引发了 属性Changed。但是,肯定有更有效的方法来做到这一点吗?
private void RefreshDataGridTolerance()
{
foreach (var measurementPoint in DataSet)
{
//TODO: Change this into a real way to raiseproperty changed without actually changing the value
var temp = measurementPoint.Value;
measurementPoint.Value = temp;
// something like this doesnt work?
// RaisePropertyChanged(nameof(measurementPoint.Value));
}
}
集合定义如下:ObservableCollection<MeasurementPoint> DataSet
您可以在模型 class 中实施 public 方法,该方法将为每个定义的 属性 引发 属性 更改事件。最便宜的方法可能是这样的:
public class MeasurementPoint : ModelBase
{
//...
public void RefreshAllProperties()
{
foreach(var prop in this.GetType().GetProperties())
this.OnPropertyChanged(prop.Name);
}
}
您可以像这样刷新一个数据元素的绑定。
var element = DataSet.First();
element.RefreshAllProperties();
我有一个 class ,其中我通常定义一个 属性 如下:
public class MeasurementPoint : ModelBase
{
private double _value;
public double Value
{
get { return _value; }
set
{
_value = value;
NotifyPropertyChanged();
}
}
}
接下来我创建了一个包含许多 'MeasurementPoint' 对象的集合。我想在满足特定值逻辑的每个对象上引发 notifyPropertyChanged。
目前此方法有效,并且引发了 属性Changed。但是,肯定有更有效的方法来做到这一点吗?
private void RefreshDataGridTolerance()
{
foreach (var measurementPoint in DataSet)
{
//TODO: Change this into a real way to raiseproperty changed without actually changing the value
var temp = measurementPoint.Value;
measurementPoint.Value = temp;
// something like this doesnt work?
// RaisePropertyChanged(nameof(measurementPoint.Value));
}
}
集合定义如下:ObservableCollection<MeasurementPoint> DataSet
您可以在模型 class 中实施 public 方法,该方法将为每个定义的 属性 引发 属性 更改事件。最便宜的方法可能是这样的:
public class MeasurementPoint : ModelBase
{
//...
public void RefreshAllProperties()
{
foreach(var prop in this.GetType().GetProperties())
this.OnPropertyChanged(prop.Name);
}
}
您可以像这样刷新一个数据元素的绑定。
var element = DataSet.First();
element.RefreshAllProperties();