2
我有一個可觀察的超時更改的對象集合。使用CollectionViewSource篩選ObservableCollection會產生
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">
常自動更新。我只是試過了,我的ComboBox獲取了添加到我的ObservableCollection中的新對象。 – ErazerBrecht
這就是我的想法。我終於明白了。我有很多事情是由raisepropertychanged和Update Handle等等來運行的...所以我刪除了所有這些,並且它工作。 – visc