Zol*_*rna 0 c# wpf collectionview
我有CollectionView一个源自ObservableCollection:
private static ObservableCollection<CalculationViewModel> _calculations;
CalculationViewModelsCollection = (CollectionView)CollectionViewSource.GetDefaultView(_calculations);
Run Code Online (Sandbox Code Playgroud)
我的问题是,当过滤器的结果是什么都没有时,我想清除过滤器,并用其他条件重新过滤,但CollectionView总是空的。
我尝试通过以下方式重置过滤器:
CalculationViewModelsCollection.Filter = null;
CalculationViewModelsCollection.Refresh();
Run Code Online (Sandbox Code Playgroud)
和
CalculationViewModelsCollection.Filter = delegate(object p)
{
return true;
};
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。
您能否提供一些如何重置过滤器的建议CollectionView?
从您的示例来看,我不完全确定您如何获取 CollectionView,也不确定我是否正确理解您的问题。
但无论如何,我希望下面的示例代码可以帮助您解决问题。它是一个应用程序,有一个包含字符串的列表框和一个“过滤器”文本框。如果列表中没有任何内容与过滤器匹配,则过滤器将设置为空,从而显示所有项目。
XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:v="clr-namespace:WpfApplication3"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBox x:Name="textBox" TextChanged="TextBox_TextChanged"/>
<ListBox x:Name="listBox"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
隐藏代码:
public partial class MainWindow : Window
{
ListCollectionView lcv;
Predicate<object> filterFx;
public MainWindow()
{
InitializeComponent();
ObservableCollection<string> s = new ObservableCollection<string>();
"The Quick Brown Fox Jumps Over The Lazy Dog"
.Split(' ')
.ToList()
.ForEach((word) => s.Add(word.ToString()));
this.lcv = new ListCollectionView(s);
this.listBox.ItemsSource = this.lcv;
this.filterFx = (p) => ((string)p).ToUpper().Contains(this.textBox.Text.ToUpper());
lcv.Filter = this.filterFx;
}
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
lcv.Refresh();
if (lcv.Count == 0)
lcv.Filter = null;
else
lcv.Filter = filterFx;
}
}
Run Code Online (Sandbox Code Playgroud)