我有两个 ItemsControl,一个是 ListView,另一个是我正在开发的自定义控件。
我已将两个控件的 ItemsControl.ItemsSource 属性设置为同一个 IEnumerable 对象,在本例中为 List。
我将筛选器应用于自定义控件的 ItemsControl.Items 属性 (this.Items.Filter = myFilter),并且我的控件按预期刷新,仅显示与筛选器匹配的项目。
但是,对其 ItemsControl.ItemsSource 属性使用相同 IEnumerable 对象的 ListView 也会刷新,仅显示与我应用于自定义控件的筛选器相匹配的项目。
谁能告诉我如何防止自定义控件中的过滤器影响列表视图中的项目?
我能想到的第一件事是,不需要对您所描述的内容进行任何更大的修改,只需将 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];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)