我有和this一樣的問題。但我使用DataGrid而不是ListBox,它似乎不像這樣工作(這也可能是因爲我從來沒有使用Visual Basic,也沒有將代碼正確地轉換爲C#)。 我基本上想要兩個DataGrids在不同的過濾器相同的數據。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,則Filter將在兩個Datagrids上工作。我是否必須使用其他視圖而不是CollectionView(ListCollectionView也不起作用)?
我做了一個小樣本項目,以顯示問題sample。它只包含一個構造函數和一個可觀察的集合。
你是如何綁定或設置你的DataGrid上的ItemsSource? – 2012-08-02 22:58:12
即時設置this.DataContext = dataLines;在MainWindow構造函數中。然後ItemsSource =「{Binding}」在Xaml中的DataGrids – user1550097 2012-08-02 23:55:27