456
成员
- 已加入
- 2020年4月19日
- 留言内容
- 6
- 编程经验
- 1-3
你好,
我有一个小例程,带有带有文本框的ListView-ListView绑定到视图模型。我使用CollectionView对列表框中的项目进行分组-文本框运行过滤器以根据输入的内容隐藏项目。
这一切都非常好-除非键入文本框并运行过滤器,否则所有由CollectionView动态创建的扩展器都将关闭。
这是由于必须使用ListView.Refresh()更新并显示过滤后的ListView引起的-Refresh()关闭所有扩展器。
有什么办法解决这个问题,我无法相信这是标准的操作方式,因为每次键入内容时都会关闭扩展器,这确实令人不快。
我将不胜感激。
我有一个小例程,带有带有文本框的ListView-ListView绑定到视图模型。我使用CollectionView对列表框中的项目进行分组-文本框运行过滤器以根据输入的内容隐藏项目。
这一切都非常好-除非键入文本框并运行过滤器,否则所有由CollectionView动态创建的扩展器都将关闭。
这是由于必须使用ListView.Refresh()更新并显示过滤后的ListView引起的-Refresh()关闭所有扩展器。
有什么办法解决这个问题,我无法相信这是标准的操作方式,因为每次键入内容时都会关闭扩展器,这确实令人不快。
我将不胜感激。
这是'Dog'ListView中显示的对象:
public partial class Dogs : ViewModelBase
{
//Group one nesting level
private string _l1grouping;
public string L1grouping
{
get
{
return _l1grouping;
}
set
{
_l1grouping = value;
OnPropertyChanged(nameof(L1grouping));
}
}
//Group two nesting level
private string _l2grouping;
public string L2grouping
{
get
{
return _l2grouping;
}
set
{
_l2grouping = value;
OnPropertyChanged(nameof(L2grouping));
}
}
//Group three nesting level
private string _l3grouping;
public string L3grouping
{
get
{
return _l3grouping;
}
set
{
_l3grouping = value;
OnPropertyChanged(nameof(L3grouping));
}
}
//Name
private string _name;
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
}
这是View模型,用于将CollectionViewSource设置为动态创建Expanders和filter:
class MainWindowViewModel : ViewModelBase
{
public ICollectionView DogsCollectionView { get; }
private ObservableCollection<Dogs> _dogs = new ObservableCollection<Dogs>();
public ObservableCollection<Dogs> Dogs
{
get => _dogs;
set
{
if (value != _dogs)
{
_dogs = value;
OnPropertyChanged(nameof(Dogs));
}
}
}
private string _dogFilter = string.Empty;
public string DogFilter
{
get
{
return _dogFilter;
}
set
{
_dogFilter = value;
OnPropertyChanged(nameof(DogFilter));
DogsCollectionView.Refresh();
}
}
public MainWindowViewModel()
//Constructor
{
DogsCollectionView = CollectionViewSource.GetDefaultView(_dogs);
//Set up filter
DogsCollectionView.Filter = FilterBrowserItems;
//Set up grouping
DogsCollectionView.GroupDescriptions.Add(new PropertyGroupDescription(nameof(SaveExpanderState.Dogs.L1grouping)));
DogsCollectionView.GroupDescriptions.Add(new PropertyGroupDescription(nameof(SaveExpanderState.Dogs.L2grouping)));
DogsCollectionView.GroupDescriptions.Add(new PropertyGroupDescription(nameof(SaveExpanderState.Dogs.L3grouping)));
}
private bool FilterBrowserItems(object obj)
{
if (obj is Dogs check)
{
string nametocheck = check.Name.ToLower();
return nametocheck.Contains(DogFilter.ToLower());
}
return false;
}
}
创建狗的MainWindow代码:
public partial class MainWindow : Window
{
MainWindowViewModel DogViewModel
{
get;
set;
}
public MainWindow()
{
InitializeComponent();
DogViewModel = new MainWindowViewModel();
DogViewModel.Dogs.Add(new Dogs() { Name = "Max", L1grouping = "Large", L2grouping = "Brown", L3grouping = "Fast" }); ;
DogViewModel.Dogs.Add(new Dogs() { Name = "Bob", L1grouping = "Small", L2grouping = "Brown", L3grouping = "Slow" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Fido", L1grouping = "Large", L2grouping = "Brown", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Brian", L1grouping = "Small", L2grouping = "Brown", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Steve", L1grouping = "Large", L2grouping = "Black", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Emma", L1grouping = "Large", L2grouping = "Black", L3grouping = "Slow" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Shep", L1grouping = "Large", L2grouping = "Black", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Lassy", L1grouping = "Large", L2grouping = "White", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Burt", L1grouping = "Large", L2grouping = "White", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Siggy", L1grouping = "Small", L2grouping = "White", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Heidi", L1grouping = "Small", L2grouping = "Black and White", L3grouping = "Fast" });
DogViewModel.Dogs.Add(new Dogs() { Name = "Loki", L1grouping = "Large", L2grouping = "Yellow", L3grouping = "Fast" });
ListViewDogs.DataContext = DogViewModel;
FilterBoxText.DataContext = DogViewModel;
}
}