【问题标题】:Windows 8 CollectionViewSource ObservableCollection Binding Not UpdatingWindows 8 CollectionViewSource ObservableCollection 绑定未更新
【发布时间】:2012-08-19 17:55:10
【问题描述】:

我有一个 CollectionViewSource,它绑定到可观察集合的子集,以显示主页上的前 n 篇文章。

<CollectionViewSource
        x:Name="groupedItemsViewSource"
        Source="{Binding Groups}"
        IsSourceGrouped="true"
        ItemsPath="TopItems" />

在我的代码中,我执行以下操作:

protected async override void LoadState(Object navigationParameter, ...)
{
    var feedDataSource = (FeedDataSource)navigationParameter;
    this.DefaultViewModel["Groups"] = feedDataSource.Feeds;
}

我的 FeedDataSource 包含一个 ObservableCollection&lt;FeedCategory&gt; Feeds,其中包含一个 ObservableCollection&lt;FeedItem&gt; Items 和 TopItems :

public ObservableCollection<FeedItem> TopItems
{
    get { return new ObservableCollection<FeedItem>(this.Items.Take(5)); }
}

现在 - 我添加了一个刷新方法,该方法将更多 FeedItems 添加到 Items 集合中,但是当我刷新时,它对我的​​主页上使用 groupedItemsViewSource 作为其 ItemsSource 属性的网格视图没有影响。

ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"

如果我离开页面,然后再次返回(因此页面被重建),新项目就在那里。为什么我的 GridView 没有在这些更改发生时显示它们?我认为通过绑定集合和网格视图,它们应该反映这些变化?我已经尝试将它们更改为两个一个,一个方式 - 但它没有任何区别。

谁能解释为什么这不起作用?

【问题讨论】:

    标签: c# xaml windows-8 windows-runtime


    【解决方案1】:

    在您的 TopItems 属性中,您将返回一个新的 ObservableColleciton,其中包含 Items 集合中的前五个项目。 CollectionViewSource 绑定到这个新的 ObservableCollection,而不是原始的 Items 集合。因此,当您更新 Items 集合时,没有任何东西绑定到它来接收更新通知。您需要绑定到原始 Items 集合,或者在使用新数据更新 Items 集合的方法中,为 TopItems 属性触发 PropertyChanged 事件。

    【讨论】:

    • 好的,谢谢。但是,似乎没有什么订阅属性更改事件。在包含 Items 和 TopItems 集合的 FeedCategory 上,我扩展了 Bindablebase,但是当我调用 OnPropertyChanged 时,事件始终为空。
    • 解决这个问题的最佳方法是什么? - 在刷新功能中,我再次获取 TopItems 并设置视图模型/数据上下文...谢谢。
    【解决方案2】:

    您应该能够在Items ObservableCollection 上收听CollectionChanged 事件来执行您的要求。

    this.Items = new ObservableCollection<FeedItem>();
    this.Items.CollectionChanged += delegate { base.OnPropertyChanged("TopItems"); };
    

    现在,当 Items 集合更改时,绑定魔术师会注意到它还应该评估 TopItems 属性的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2011-08-11
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多