我有ObservableCollection
个名字和平均值。
然后我有一个文本块,它使用转换器来获得上述集合中平均值的平均值
这个想法是有类似的东西:
Name1 2.15 %
Name2 1.24 %
Name3 3.25 %
2.21 %
名单和平均值列表位于列表框中,来自集合,下面平均值的平均值位于通过转换器绑定到同一集合的文本块上,该转换器将值平均化。
这一切都正常。现在,列表框中的平均值位于文本框中并且可以进行编辑,但是当它们被编辑时,平均值的平均值不会更新,因为只有对象内的属性才会发送属性更改通知,而不是集合本身
当任何一行的平均值发生变化时,有没有办法告诉下面的值更新?
答案 0 :(得分:2)
我建议改变你的设计。
在ViewModel上创建一个属性,表示集合的平均值,并将文本框绑定到该新属性。
例如......
放入get方法:
//Get my objects and subscribe to their property change event
MyObjects = GetMyObjects();
foreach (var item in MyObjects)
{
item.PropertyChanged += (sender, e) =>
{
if (e.PropertyName == "Value")
{
Average = MyObjects.Average(x.Value);
}
};
}
这是你的新viewmodel属性:
//Bind your textbox to this guy
double _Average;
public double Average
{
get { return _Average; }
set
{
if (_Average != value)
{
_Average = value;
OnNotifyPropertyChanged("Average");
}
}
}