我有同样的问题。但是我使用的是 DataGrid 而不是 ListBox,它似乎不像这样工作(也可能是因为我从未使用过 Visual Basic 并且没有将代码正确地翻译成 C#)。我基本上想要两个具有不同过滤器的相同数据的 DataGrids。
ICollectionView view_dataLinesUnfiltered;
ICollectionView view_dataLinesFiltered;
public MainWindow()
{
...
//view_dataLines = CollectionViewSource.GetDefaultView(dataLines); // <- Filter works on both
view_dataLinesUnfiltered = new CollectionView(dataLines); // <- Filter doesn´t work at all
view_dataLinesFiltered = new CollectionView(dataLines);
....
// Control Events
this.ShowAA.RaiseEvent(new RoutedEventArgs(System.Windows.Controls.Primitives.ToggleButton.UncheckedEvent));
}
private void ShowAA_Checked(object sender, RoutedEventArgs e)
{
view_dataLinesUnfiltered.Filter = null;
}
private void ShowAA_UnChecked(object sender, RoutedEventArgs e)
{
view_dataLinesUnfiltered.Filter = delegate(object o) { return FilterContent(o as ErrorDetection.stDataLine, "AA", ""); };
}
bool FilterContent(ErrorDetection.stDataLine line, string sFilterAA, string sFilter)
{
shortArrayToHexStringConverter converter = new shortArrayToHexStringConverter();
string comBuffer = converter.Convert(line.ComBufferP as object,typeof(string),0,System.Globalization.CultureInfo.CurrentCulture) as string;
return false;// !comBuffer.Contains("AA");
}
调用 FilterContent 方法没有问题,但 DataGrid 仍然显示这些行。如果我使用 GetDefaultView 过滤器适用于两个数据网格。我是否必须使用其他视图而不是 CollectionView(ListCollectionView 也不起作用)?
我做了一个小样本项目来展示问题样本。它只包含一个构造函数和一个可观察的集合。