【发布时间】:2012-04-22 06:16:36
【问题描述】:
说明: 首先,我创建了一个可通过公共属性 MyCollection 访问的 ObservableCollection。现在,如果我将 DataGrid UI 绑定到 MyCollection,它将识别集合更改,但如果 MyCollection 本身发生更改(即 UpdateCollection 方法)则不会。为了解决这个问题,我将熟悉的 'PropertyChanged("MyCollection")' 应用于 MyCollection 属性。
现在我发现需要对需要集合视图层的 DataGrid 内容进行分组。当我添加并绑定到 CollectionView 时,当 MyCollection 被重新分配时 UI 不再更新。我读到只有 CollectionChanged 从源传播到视图。我猜在我的情况下,MyCollection 上的 PropertyChange 需要以某种方式触发 Source 或 View 上的 CollectionChanged 事件。
问题: 如何重新分配 MyCollection 以触发绑定到 MyCollection 视图的 UI 更新?
注意:重新分配 MyCollection 的原因是模块化 MEF/MVVM 架构。
public class MyViewModel
{
public MyViewModel()
{
MyCollectionViewSource = new CollectionViewSource() { Source = MyCollection};
// The DataGrid is bound to this ICollectionView
MyCollectionView = MyCollectionViewSource.View;
}
// Collection Property
// NotifyPropertyChanged added specifically to notify of MyCollection re-assignment
ObservableCollection<MyObject> _MyCollection;
public ObservableCollection<MyObject> MyCollection
{
get {return _MyCollection;}
set {if (value != _MyCollection)
{_MyCollection = value;
NotifyPropertyChanged("MyCollection");}}
}
public MyCollectionViewSource PropertiesCollectionViewSource { get; private set; }
public ICollectionView = MyCollectionView { get; private set; }
// Method updates MyCollection itself (Called via ICommand from another ViewModel)
public void UpdateCollection(ObservableCollection<MyObject> NewCollection)
{
MyCollection = NewCollection;
}
}
谢谢,
【问题讨论】:
-
你也可以重新分配
MyCollectionViewSource.Source吗?我没有看到Properties发生了变化。 -
我很抱歉这是一个错字。我已经编辑了问题,Source 属性应该等于 MyCollection。
标签: wpf binding observablecollection