更新ObservableCollection对象更改的值

时间:2013-02-11 18:40:59

标签: c# wpf notifications observablecollection

我有ObservableCollection个名字和平均值。

然后我有一个文本块,它使用转换器来获得上述集合中平均值的平均值

这个想法是有类似的东西:

Name1  2.15 %
Name2  1.24 %
Name3  3.25 %


       2.21 %

名单和平均值列表位于列表框中,来自集合,下面平均值的平均值位于通过转换器绑定到同一集合的文本块上,该转换器将值平均化。

这一切都正常。现在,列表框中的平均值位于文本框中并且可以进行编辑,但是当它们被编辑时,平均值的平均值不会更新,因为只有对象内的属性才会发送属性更改通知,而不是集合本身

当任何一行的平均值发生变化时,有没有办法告诉下面的值更新?

1 个答案:

答案 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");
            }
        }
    }