【问题标题】:GridView does not subscribe to CollectionChanged eventGridView 不订阅 CollectionChanged 事件
【发布时间】:2013-09-03 07:02:15
【问题描述】:

我有一个如下所示的自定义列表:

public class MyCollection :   ICollection<Model>, 
                              ISupportIncrementalLoading, 
                              INotifyCollectionChanged, 
                              INotifyPropertyChanged

每当我想查看要更新时,它都会引发CollectionChanged 事件,例如:

public void Clear()
{
     InternalData.Clear();
     if (CollectionChanged != null)
     {
          CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
     }
}

我有一个GridView,其属性ItemsSource 绑定到我的自定义集合。然而,虽然我的自定义集合中有数据(并且由于我的自定义IEnumerator&lt;Model&gt; GetEnumerator(),我可以使用动态视图字段浏览这些数据),但事件CollectionChanged 永远不会触发,因为它始终是null。就像GridView 没有订阅该事件。我不知道我能做些什么来强制 GridView 监听这个事件。

我在 pastebin 上放了一个工作示例:http://pastebin.com/01zS6yjPGridView 绑定到集合时,CollectionChanged 事件始终为 null 事件。

【问题讨论】:

  • 大多数情况下将GridViewListView 结合使用。例如,请参阅msdn.microsoft.com/en-us/library/ms752213(v=vs.100).aspx
  • 您是否尝试过让您的自定义集合扩展 ObservableCollection?或者用ObservableCollection 测试同一个实例?另外,尝试在GridView 绑定到的属性上提高PropertyChanged(通常是“Items[]”)。

标签: c# xaml gridview mvvm windows-runtime


【解决方案1】:

GridView 不响应CollectionChanged 事件,而是响应VectorChanged 事件(从ObservableVector 实现)。

【讨论】:

  • 我实现了 IObservableVector,但是 VectorChanged 也总是为空
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多