[ad_1]
您好,我有一个 WPF 应用程序,其中使用 ListCollectionView 作为 ComboBox 的 ItemsSource。 此 ListCollectionView 主要从 AudioDevice 类填充。 实际上,之前我根据 AudioDevice 类制作了一个 List。 我的 Listcollectionview 工作得非常完美。 但我想检测在应用程序运行时是否发生了任何项目更改?
我怎样才能做到这一点? 要记住的重要一点是,我通过 Codebehind 所做的所有事情。 在这个场景中我没有使用任何 MVVM 基础架构。
这是我声明 ListCollectionView 的最后一部分的代码片段。
ListCollectionView lcv = new(devices); lcv.GroupDescriptions.Add(new PropertyGroupDescription("Direction")); cmb1.ItemsSource = lcv;
我尝试过的:
我尝试使用来解决这个问题
INotifyCollectionChanged
但该代码无法正常工作并且无法在运行时检测到更改。
解决方案1
文档非常清楚,它列出了支持的事件: ListCollectionView 类 (System.Windows.Data) | 微软学习[^]。
更新
以下是如何处理 CollectionChanged
事件:
private void OnCollectionChanged( object? sender, NotifyCollectionChangedEventArgs e) { // any new items? if (e.NewItems?.Count > 0) { // Item(s) added } // any to remove? ... not required for this purpose. if (e.OldItems?.Count > 0) { // Item(s) removed } }
解决方案2
我想说这取决于收藏的类型 devices
变量是. 如果这只是一个 List<>
那么更改将不会反映在 UI 中,因为 List<>
当内容更改时不会发出事件。
您可能有两个选择:
1)每当您收到更新时 devices
列表,您必须通过创建一个新的来更新组合框 ListCollectionView
并将其分配给 cmb1.ItemsSource
2)创建一个 ObservableCollection<>
并将其存储在类中。 然后你可以创建一个 ListCollectionView
它使用此可观察集合作为源,然后使用设备列表填充可观察集合。 这意味着对可观察集合的任何更改也应该适用于 ListCollectionView
并应在更新时应用于 UI。
第二个选项可能比较棘手,因为它意味着添加、更新和/或删除可观察集合中的条目以匹配可观察集合中的条目 devices
列表。 这可能取决于对您来说最简单的选择。
[ad_2]
コメント