2009-06-30 108 views
4

我有兩個ItemsControls,一個是ListView,還有一個是我正在開發的自定義控件。從共享過濾器中停止ItemsControls

我已經將兩個控件的ItemsControl.ItemsSource屬性設置爲相同的IEnumerable對象,在這種情況下,List。

我對我的自定義控件(this.Items.Filter = myFilter)的ItemsControl.Items屬性應用過濾器,我的控件按預期刷新,只顯示與過濾器匹配的項目。

但是,ListView爲其ItemsControl.ItemsSource屬性使用相同的IEnumerable對象也會刷新,只顯示與我應用於自定義控件的過濾器相匹配的項目。

任何人都可以告訴我如何保持我的自定義控件中的過濾器影響我的listview中的項目?

回答

2

我能想到的第一件事就是,不需要對所描述的任何更大的修改就是將ItemsSource集合包裝到您的XAML的CollectionViewSource中,並將它們分配給它們。

<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 2009-07-02 21:42:08