2012-12-05 2 views
1

ComboBox를 사용하여 CollectionViewSource에있는 필터를 어떻게 업데이트 할 수 있는지 궁금합니다. 나는 다음과 같은 코드를 가지고 : 나는 콤보의 SelectionChanged 이벤트의 일종을 필요로 확신하지만 난 그게이 코드를 작동하게하는 방법을 알아낼 수 없습니다ComboBox로 CollectionViewSource 필터 변경

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

합니다.

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
당신은 너무 당신의 콤보 상자의 인 selectionchanged 이벤트 핸들러에, 당신의 CVS를 새로 고침 ... 당신의 CollectionViewSource의보기를 새로 고침해야합니다

:

cvsCars.View.Refresh(); 

당신은 WPF의 데이터 바인딩 능력을 조사 할 수 있으며, 그런 다음 Model View ViewModel (MVVM) "패턴". 그런 식으로 콤보 상자의 SelectedItem을 윈도우의 속성 인 DataContext에 바인딩하고 SelectionChanged 이벤트를 처리하지 않아도됩니다.

+0

이것은 원래 온라인 조사에서 생각한 것이지만 "TargetInvocationException이 처리되지 않았습니다"오류가 발생합니다. 어떻게 내가 그걸 고칠 수 있을지 생각해? 답장을 보내 주셔서 감사합니다. EDIT : Nevermind 나는 당신이 업데이트 된 것을 본다. 감사. – Grttn

관련 문제