如何将属性更改事件传递给祖先?

时间:2009-03-17 18:03:53

标签: c# wpf data-binding .net-3.5

我确定我错过了一些基本知识,所以请耐心等待。

我有两个对象,SalesOrder和SalesOrderLineItem。 lineitems保存在SalesOrder的Observablecollection<SalesOrderLineItem>中,如果我添加行项目,我的数据绑定listView知道新项目。

现在我遇到问题的地方是:SalesOrder有一个名为“OrderTotal”的只读属性,它知道所有行项目的总价格是多少。

如果我更改订单项的数量或价格,我似乎不知道如何让更改通知冒泡到“OrderTotal”。

这两个类都继承自,并触发INotifyPropertyChanged

我错过了吗?

3 个答案:

答案 0 :(得分:2)

ObservableCollection仅在添加,删除项目或刷新列表时通知,而不是在集合中项目的属性发生更改时通知。

SalesOrder类需要监听每个SalesOrderLineItem的PropertyChanged事件。

-

OrderTotal属性也可以是动态的,每次生成总数......

答案 1 :(得分:0)

如果您喜欢冒险,可以尝试BindableLinq或类似的东西。 它允许您公开侦听更改的查询结果。

但它还没有完成测试版,我不确定它会不会...... ContinuousLinq是另一个,但它根本不支持Silverlight。

除此之外,您必须听取每个孩子的意见,并在收集更改时添加/删除处理程序。

答案 2 :(得分:0)

public ObservableCollection<TestClass> List
    {
        get { return _List; }
        set {
            if (_List!= value)
            {
                _List = value;
                raisePropertyChange("List");
                List.ToList().ForEach(i=> i.PropertyChanged+= (o,e)=>
                {
                    //PropertyChanged.Raise(() => List);
        raisePropertyChange("List");
        //or what ever you want
                }
            );


            }
        }
    }