【发布时间】:2016-01-29 18:25:33
【问题描述】:
我有一个随时间变化的可观察对象集合。
ObservableCollection
Object 1
Object 2
...
我想做的是在组合框中显示此信息的过滤版本。所以我设置了一个 CollectionViewSource,它的来源是 ObservableCollection。我定义了谁的过滤器:
private const string Unknown = "Unknown";
public DevicePackageInfo()
{
this.operatingSystemVersion = DevicePackageInfo.Unknown;
this.packageVersionInfo = new PackageVersionInfo(DevicePackageInfo.Unknown);
this.PackageVersionList = new ObservableCollection<PackageVersionInfo>() { new PackageVersionInfo(DevicePackageInfo.Unknown) };
this.packageVersionCollectionView = new CollectionViewSource();
this.packageVersionCollectionView.Filter += PackageHistoryFilter;
this.packageVersionCollectionView.Source = this.PackageVersionList;
this.SetSynced();
}
public void PackageHistoryFilter(object sender, FilterEventArgs e)
{
if (e.Item != null)
e.Accepted = ((PackageVersionInfo)e.Item).OnEAC || ((PackageVersionInfo)e.Item).SelectedOnPC;
}
问题是当我更新 ObservableCollection 时,我的组合框没有更新。
我在列表中看到的唯一对象是“未知”,这是我在构建类期间添加到列表中的第一个对象。
我的解决方案可能并不完全正确......但我很困惑。过滤后的集合源是否有内置方式订阅ObservableCollection 并保持最新状态?我该怎么做?
当我更改我的 ObservableCollection 时,我想更新绑定到我的组合框的集合。
最少的代码是理想的,我真的不想定义一个新的集合类来实现通知等。
编辑:这是我的 XAML
<ComboBox Name="cbSelection" bhvr:SelectionChangedBehaviour.Command="{Binding PackageSelectionCommand}" ItemsSource="{Binding PackageInfo.PackageVersionCollectionView.View, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding PackageInfo.PackageVersionInfo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True">
【问题讨论】:
-
通常当你使用 ObservableCollection 时,CollectionViewSource 会自动更新。我刚刚尝试过,我的 ComboBox 获取了我添加到 ObservableCollection 中的新对象。
-
我就是这么想的。我最终想通了。我有很多东西被 raisepropertychanged 和 Update Handle 等处理掉了......所以我删除了所有这些,它起作用了。