在我的小型WPF项目中,我有一个带有三个选项卡的TabControl。每个选项卡上都是一个ListBox。该项目跟踪我们需要购买的食品杂货。 (不,这不是家庭作业,是给我妻子的。)因此,我有一个ShoppingListItem列表,每个列表都有一个Name和Needed属性:当需要此项目时,true和购买后。因此,三个选项卡是全部,购买和需要。它们都应指向同一个false(继承自ShoppingListItemCollection)。但是Bought仅应显示Needed为假的项目,Needed仅应显示Needed为真的项目。 (所有选项卡上的项目都有复选框。)这似乎并不难,但是几个小时后,我离解决这个问题越来越近了。我需要的似乎是CollectionView或CollectionViewSource,但我什么也没发生。我选中并取消选中“全部”选项卡上的框,而其他两个选项卡上的项目就在那里盯着我。有任何想法吗? 最佳答案 您可以使用CollectionViewSource通过过滤器重用原始集合。<Window.Resources> <CollectionViewSource x:Key="NeededItems" Source="{Binding Items}" Filter="NeededCollectionViewSource_Filter" /> <CollectionViewSource x:Key="BoughtItems" Source="{Binding Items}" Filter="BoughtCollectionViewSource_Filter" /></Window.Resources><TabControl> <TabItem Header="All"> <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Items}" /> </TabItem> <TabItem Header="Bought"> <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Source={StaticResource BoughtItems}}" /> </TabItem> <TabItem Header="Needed"> <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Source={StaticResource NeededItems}}" /> </TabItem></TabControl>过滤器需要一些后面的代码。private void NeededCollectionViewSource_Filter(object sender, FilterEventArgs e){ e.Accepted = ((ShoppingListItem) e.Item).Needed;}private void BoughtCollectionViewSource_Filter(object sender, FilterEventArgs e){ e.Accepted = !((ShoppingListItem) e.Item).Needed;}关于c# - 使用过滤器将一个集合绑定(bind)到多个选项卡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/274348/
10-12 02:31