5

我有一个正在过滤的列表框,如下所示:

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

SelectedItem当过滤器与 viewmodel 代码一起使用时,我遇到了一个问题,如下所示:

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

应用过滤器时,SelectedItem设置为null。但是,除非用户实际单击它,否则我想保留该选定项目。如果删除了过滤器,则仍应选择所选项目。模型确实有一个IsSelected属性,我一直在想办法查询该IsSelected属性。但是,然后视图的绑定将无法按我期望的方式工作....或者至少我在绕圈子认为它不能

4

3 回答 3

1

在这种情况下,我完成修复的唯一方法是SelectionChanged

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

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

于 2013-06-14T03:54:01.483 回答
0

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

于 2016-01-20T09:22:10.793 回答
0

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

于 2017-03-13T08:32:02.637 回答