在过滤CollectionViewSource期间保留SelectedItem

我有一个像这样过滤的列表框:

var view = CollectionViewSource.GetDefaultView(FilterSource); view.Filter = FilterCode; 

我遇到了一个问题,当filter与viewmodel代码一起使用时, SelectedItem会丢失,如下所示:

 VM { public ObservableCollection Items{get;set;} public Model SelectedItem { get{return _selectedItem;} set{_selectedItem = value; NotifyPropertyChanged();} } } 

应用filter时, SelectedItem设置为null 。 但是,除非用户实际点击它,否则我希望保留所选项目。 如果删除filter,则仍应选择所选项目。 Model确实有一个IsSelected属性,我一直试图想办法查询IsSelected属性。 但是,视图的绑定不会像我期望的那样工作….或者至少我认为它不能

我在这里完成修复的唯一方法是SelectionChanged事件中的以下内容:

 if (e.AddedItems.Count == 0 && e.RemovedItems.Count >= 0) SpecialtyListBox.SelectedItem = e.RemovedItems[0]; 

但是,这似乎非常hacky并且强制一旦选择了初始的项目,必须始终选择一个项目。 在这种情况下,这可能会奏效,但我仍然想看看是否有人有更好的解决方案?

我有一个类似的问题,列表框显示为选项卡式视图。 我通过创建一个转换器为“isActive”生成一个布尔标志并将其分配给CollectionViewSource.IsLiveFilteringRequested解决了这个问题。 这会阻止非活动列表框更新所选项目。

您可以通过创建始终将当前所选项目添加到已过滤项目的filter来解决此问题。 如果无法直接完成此操作,只需将所选项目保存在单独的变量中即可。