【问题标题】:Binding to ObservableCollection works, but not ListCollectionView绑定到 ObservableCollection 有效,但不是 ListCollectionView
【发布时间】:2017-07-28 08:45:15
【问题描述】:

我正在尝试让我的ListCollectionView 绑定到组合框。但是,它似乎只有在我绑定到我的 ObservableCollection 时才有效。

属性:

private ListCollectionView sitesView;
public ListCollectionView SitesView
{
        get { return sitesView; }
        set
        {
            sitesView = value;
            RaisePropertyChanged(() => SitesView);
        }
}
public ObservableCollection<ISite> SitesCollection { get; set; }

构造函数:

SitesCollection = new ObservableCollection<ISite>();      
SitesView = (ListCollectionView)CollectionViewSource.GetDefaultView(SitesCollection);

当这样绑定时:

<ComboBox Grid.Row="2" ItemsSource="{Binding SitesView, Mode=TwoWay}"/>

当我单击组合框中的下拉菜单时,我添加到 SitesCollection 的任何项目都不会显示。但如果我像这样进行绑定:

<ComboBox Grid.Row="2" ItemsSource="{Binding SitesCollection, Mode=TwoWay}"/>

它工作正常,当我单击下拉菜单时我会看到这些项目。

尝试修复:在我将项目添加到SitesCollection 后,我尝试在ListCollectionViewObservableCollection 上发出属性更改通知,但没有任何区别。有什么想法吗?

【问题讨论】:

  • 其实下面的亚当有正确的答案...
  • 没有。这应该有效。如果您没有看到添加到 ObservableCollection 的项目,则可能是绑定到了错误的视图模型实例。

标签: c# wpf observablecollection listcollectionview


【解决方案1】:

我没有时间测试我的答案;很抱歉,我们会跟进。

我认为你的问题是因为CollectionViewSource.GetDefaultView(...) 返回一个ICollectionView,我认为它本质上只是一个使基础数据能够被排序的包装器。

尝试将SitesView 设置为DefaultViewSourceCollection

SitesView = (ListCollectionView)CollectionViewSource.GetDefaultView(SitesCollection).SourceCollection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2016-02-10
    • 2011-04-10
    • 1970-01-01
    • 2013-04-24
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多