2009-06-30 5 views
4

두 개의 ItemsControl, ListView 및 하나의 사용자 정의 컨트롤이 있습니다.공유 필터에서 항목 제어를 중지하십시오.

두 컨트롤의 ItemsControl.ItemsSource 속성을 같은 IEnumerable 개체 (이 경우 List)로 설정했습니다.

사용자 지정 컨트롤 (this.Items.Filter = myFilter)의 ItemsControl.Items 속성에 필터를 적용하고 필터가 일치하는 항목 만 표시하여 예상대로 컨트롤을 새로 고칩니다.

그러나 ItemsControl.ItemsSource 속성에 동일한 IEnumerable 개체를 사용하는 ListView도 새로 고침되어 사용자 지정 컨트롤에 적용된 필터와 일치하는 항목 만 표시됩니다.

내 목록 컨트롤의 필터를 내 사용자 지정 컨트롤에서 내 listview의 항목에 영향을주지 않는 방법을 알려줄 사람이 있습니까?

답변

2

제가 생각할 수있는 첫 번째 사항은 설명 된 내용을 더 크게 수정하지 않아도 XSML의 CollectionsViewSource에 ItemsSource 컬렉션을 래핑하는 것입니다.

<DockPanel> 

    <Button DockPanel.Dock="Top" 
      Content="Filter Lowercase Names" 
      Click="OnFilterClick"/> 

    <ListView x:Name="uiListView"> 
     <ListView.Resources> 
      <CollectionViewSource x:Key="ItemsCollection" 
            Source="{Binding Names}" /> 
     </ListView.Resources> 
     <ListView.ItemsSource> 
      <Binding Source="{StaticResource ItemsCollection}" /> 
     </ListView.ItemsSource> 
    </ListView> 

    <ListBox x:Name="uiListBox" 
      ItemsSource="{Binding Names}" /> 

</DockPanel> 

그리고

다음 필터링 로직 :

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     Names = new List<string>(); 

     Names.Add("Robert"); 
     Names.Add("Mike"); 
     Names.Add("steve"); 
     Names.Add("Jeff"); 
     Names.Add("bob"); 
     Names.Add("Dani"); 

     this.DataContext = this; 
    } 
    public List<String> Names { get; set; } 

    private void OnFilterClick(object sender, RoutedEventArgs e) 
    { 
     uiListView.Items.Filter = x => x.ToString()[0] == x.ToString().ToUpper()[0]; 
    } 
} 
+0

훌륭해, 고마워! – Josh

관련 문제