2013-03-06 136 views
0

我有一些集合,实现INotifyCollectionChanged。UI不结合INotifyCollectionChanged

public sealed class GroupCollection : INotifyCollectionChanged, IList<Group> 
{ 
    //... 
    public event NotifyCollectionChangedEventHandler CollectionChanged; 

    private void OnCollectionChanged(NotifyCollectionChangedEventArgs e) 
    { 
     if (CollectionChanged != null) 
     { 
      CollectionChanged(this, e); 
     } 
    } 
    //... 
} 

它在XAML中使用

 <CollectionViewSource x:Name="groupedItemsViewSource" Source="{Binding Groups}"/> 

然后在xaml.cs

 this.DefaultViewModel["Groups"] = groups.GroupCollection; 

收集项目显示就好了。但用户界面不会订阅CollectionChangedCollectionChanged被触发不会自我更新。也许我需要实现更多的接口来使UI控件订阅事件?

P.S.因为编译器说,这“不是Windows运行时的界面”我不能使用的ObservableCollection。

回答

0

下使用ObservableCollection使用默认的网格应用模板时正常工作对我来说:

using System.Collections.ObjectModel; 
... 
class MyOC : ObservableCollection<SampleDataGroup> { }; 
... 
var oc = new MyOC(); 
string id = "title1"; 
oc.Add(new SampleDataGroup(id, id, id, "", id)); 
id = "title2"; 
oc.Add(new SampleDataGroup(id, id, id, "", id)); 
this.DefaultViewModel["Groups"] = oc; 

我猜想,你可以做你的项目类似的东西:

using System.Collections.ObjectModel; 
... 
public sealed class GroupCollection : ObservableCollection<Group> 
{ 
... 
+0

我做不到这个。 'GroupCollection'位于另一个项目中(项目类型为“Windows运行时组件”)。 “Windows运行时组件”中的公共类无法实现“ObservableCollection”。如果我尝试,我得到的编译错误“'ObservableCollection'不是Windows运行时的界面”。 – b1n0m 2013-03-06 16:54:46