2

我有一个ObservableCollection包含名称和平均值。

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

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

Name1  2.15 %
Name2  1.24 %
Name3  3.25 %


       2.21 %

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

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

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

4

1 回答 1

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);
                }
            };
    }

这是您的新视图模型属性:

    //Bind your textbox to this guy
    double _Average;
    public double Average
    {
        get { return _Average; }
        set
        {
            if (_Average != value)
            {
                _Average = value;
                OnNotifyPropertyChanged("Average");
            }
        }
    }
于 2013-02-11T18:57:34.340 回答