私はこのような同じ問題を抱えています。しかし、私はListBoxの代わりにDataGridを使用しており、このようには機能しないようです(これは、Visual Basicを使用したことがなく、コードをc#に正しく変換しなかったためかもしれません)。基本的に、異なるフィルターを使用して同じデータに2つのDataGridが必要です。
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も機能しません)?
問題のサンプルを示すために、小さなサンプルプロジェクトを作成しました。コンストラクターと監視可能なコレクションのみで構成されます。