通知我的UI在其VM中的集合发生更改时进行刷新

时间:2011-11-30 21:23:18

标签: wpf

我有一个绑定到VM的usercontrol。这个VM包含一个集合属性,让我们称之为“MyCollection”,并且几个常规属性允许调用其中一个“SomeProperty”。如您所见,此属性的get和set逻辑引用VM中的集合。

问题是,当我对“MyCollection”进行更改时,这显然会对UI中显示的值产生影响(因为它们是基于它计算的)。但是,当“MyCollection”发生变化时,我的UI似乎不够智能,无法自我更新。

这是我的usercontrol绑定的VM:

public class MyVM
{
    private ObservableCollection<SomeOtherVM> _myCollection = new ObservableCollection<SomeOtherVM>();

    public MyVM()
    {

    }

    public ObservableCollection<SomeOtherVM> MyCollection
    {
        get { return _myCollection; }
        [Notify]
        set 
        { 
            _myCollection = value;
        }
    }

    public virtual string SomeProperty
    {
        get
        {
            if (_myCollection.Count == 1)
                return _myCollection[0].SomeProperty;
            else
                return "More than one "SomeOtherVM" has been selected";
        }
        [Notify]
        set
        {
            foreach (SomeOtherVM s in _myCollection)
            {
                s.SomeProperty = value;
            }
        }
    }
}

}

请注意,我的usercontrol中没有任何内容直接绑定到集合,它只绑定到其get中引用集合的其他属性;组;方法

当“MyCollection”发生变化时,我在VM中可以做些什么来强制UI更新?我想避免在代码中添加任何内容以供用户控制。

1 个答案:

答案 0 :(得分:4)

订阅CollectionChanged的{​​{1}}并点击MyCollection - 其他属性的通知(没有您喜欢的属性用途)。