在过滤CollectionViewSource期间保留SelectedItem

时间:2013-06-14 03:24:35

标签: c# .net wpf binding .net-4.0

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

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。但是,除非用户实际点击它,否则我想保留所选项目。如果删除过滤器,则仍应选择所选项目。模型确实有IsSelected属性,我一直在试图想办法查询IsSelected属性。然而,视图的绑定不会像我期望的那样工作......或者至少我认为它不能

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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