Data binding INotifyCollectionChanged不足以更新数据绑定控件?

Data binding INotifyCollectionChanged不足以更新数据绑定控件?,data-binding,windows-8,windows-runtime,windows-store-apps,inotifycollectionchanged,Data Binding,Windows 8,Windows Runtime,Windows Store Apps,Inotifycollectionchanged,我正在尝试实现一个可绑定的集合—一个专门的堆栈—它需要显示在我的Windows 8应用程序的一个页面上,并在更新时显示。为此,我实现了INotifyCollectionChanged和IEnumerable: 公共类堆栈:INotifyCollectionChanged,IEnumerable { ... 公共无效推送(数字推送) { 锁(这个) { 此.impl.Add(推送); } 如果(this.CollectionChanged!=null) this.CollectionChanged

我正在尝试实现一个可绑定的集合—一个专门的堆栈—它需要显示在我的Windows 8应用程序的一个页面上,并在更新时显示。为此,我实现了INotifyCollectionChanged和IEnumerable:

公共类堆栈:INotifyCollectionChanged,IEnumerable
{
...
公共无效推送(数字推送)
{
锁(这个)
{
此.impl.Add(推送);
}
如果(this.CollectionChanged!=null)
this.CollectionChanged(this,new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add,push));
}
…以及其他方法的等价物。。。
#区域INotifyCollectionChanged实现
公共事件通知CollectionChangedEventHandler CollectionChanged;
#端区
公共IEnumerator GetEnumerator()
{
清单副本;
锁(这个)
{
复制=新列表(impl);
}
copy.Reverse();
foreach(副本中的数字)
{
收益数;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
返回此.GetEnumerator();
}
此集合类用于定义页面拥有的基础类实例的属性,该属性设置为其DataContext(页面的计算器属性),然后绑定到GridView:

<GridView x:Name="StackGrid" ItemsSource="{Binding Stack, Mode=OneWay}" ItemContainerStyle="{StaticResource StackTileStyle}" SelectionMode="None">

... ItemTemplate omitted for length ...

…因长度而忽略ItemTemplate。。。
当页面被导航到时,绑定最初起作用-堆栈中的现有项目显示良好,但添加到堆栈中或从堆栈中移除的项目不会反映在GridView中,直到页面被导航到别处或回来。调试显示堆栈中的CollectionChanged事件始终为null,因此它永远不会得到ca更新时更新


我遗漏了什么?

刚才我在自定义集合中遇到了同样的问题,我希望它是可绑定的。我发现只有从
集合派生的类才能绑定到


为什么?现在我不知道。所以,如果你真的想让它工作,那么就派生表单
集合
,但这会干扰你的设计。

你如何添加新对象?你需要在UI线程上添加它们。另外,你如何初始化数据上下文。你能发布更多代码吗?有同样的问题吗?WTF与Microsoft有关。我们已经完成了n出售了MVVM的这一愿景,然后他们拿走了架构中最关键的支柱之一:ICollectionView。我认为这一建议是正确的。我试图更改我的投票,但无法更改,因为它被锁定。您还需要提供INotifyCollectionChanged的实现,以便在视图模型已更新。
<GridView x:Name="StackGrid" ItemsSource="{Binding Stack, Mode=OneWay}" ItemContainerStyle="{StaticResource StackTileStyle}" SelectionMode="None">

... ItemTemplate omitted for length ...