2012-12-05 48 views
1

我想知道如何使用ComboBox更新CollectionViewSource上的過濾器。 我有以下代碼:使用ComboBox更改CollectionViewSource過濾器

<CollectionViewSource x:Key="cvsCars" 
         Source="{Binding Source={StaticResource odpCars}}"> 
<ComboBox Name="cbxMake" Margin="5" IsEnabled="False" /> 

我敢肯定,我需要某種形式的一個SelectionChanged事件ComboBox的,但我不能想出一個辦法,使其與此代碼的工作。

private void MakeFilterOn(object sender, RoutedEventArgs e) 
{ 
    cbxMake.IsEnabled = true; 
    cvsCars.Filter += new FilterEventHandler(cvsCars_Filter); 
} 

void cvsCars_Filter(object sender, FilterEventArgs e) 
{ 
    Car car = e.Item as Car; 
    if (car != null) 
    { 
     if (car.Maker.ToString() == cbxMake.SelectedItem.ToString()) 
     { 
      e.Accepted = true; 
     } 
     else 
     { 
      e.Accepted = false; 
     } 
    } 
} 

任何意見是非常感謝。

CollectionViewSourceObjectDataProvider填充。更新將應用於ListBox。 MakeFilterOn是一個CheckBox。

回答

2

你必須刷新你的CollectionViewSource的觀點......所以,在你的處理器爲您的組合框的SelectionChanged事件,刷新你的簡歷:

cvsCars.View.Refresh(); 

你可能想看看WPF的數據綁定和權力然後是Model View ViewModel(MVVM)「模式」。這樣,您可以將組合框的SelectedItem綁定到窗口的DataContext上的屬性,並且不需要處理SelectionChanged事件。

+0

這是我最初從我的在線研究中想到的,但它給了我一個「TargetInvocationException was unhandled」的錯誤。任何想法我可以補救嗎?謝謝回覆。 編輯:沒關係,我看到你更新。謝謝。 – Grttn