![](/img/trans.png)
[英]Using CollectionViewSource for SelectedItem.ObservableCollection
[英]Keep SelectedItem during filter of CollectionViewSource
我有一个像这样过滤的列表框:
var view = CollectionViewSource.GetDefaultView(FilterSource);
view.Filter = FilterCode;
我遇到了一个问题,当过滤器与viewmodel代码一起使用时, SelectedItem
会丢失,如下所示:
VM
{
public ObservableCollection<Model> Items{get;set;}
public Model SelectedItem
{
get{return _selectedItem;}
set{_selectedItem = value; NotifyPropertyChanged();}
}
}
应用过滤器时, SelectedItem
设置为null
。 但是,除非用户实际点击它,否则我想保留所选项目。 如果删除过滤器,则仍应选择所选项目。 Model确实有一个IsSelected
属性,我一直试图想办法查询IsSelected
属性。 然而,视图的绑定不会像我期望的那样工作......或者至少我认为它不能
我在这里完成修复的唯一方法是SelectionChanged
事件中的以下内容:
if (e.AddedItems.Count == 0 && e.RemovedItems.Count >= 0)
SpecialtyListBox.SelectedItem = e.RemovedItems[0];
但是,这似乎非常hacky并强制一旦选择了初始项目,必须始终选择一个项目。 在这种情况下,这可能会奏效,但我仍然想看看是否有人有更好的解决方案?
我有一个类似的问题,列表框显示为选项卡式视图。 我通过创建一个转换器为“isActive”生成一个布尔标志并将其分配给CollectionViewSource.IsLiveFilteringRequested解决了这个问题。 这会阻止非活动列表框更新所选项目。
您可以通过创建始终将当前所选项目添加到已过滤项目的过滤器来解决此问题。 如果无法直接完成此操作,只需将所选项目保存在单独的变量中即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.