gpt4 book ai didi

c# - 使用过滤器将一个集合绑定(bind)到多个选项卡

转载 作者:行者123 更新时间:2023-11-30 16:36:53 26 4
gpt4 key购买 nike

在我的小 WPF 项目中,我有一个 TabControl三个选项卡。每个选项卡上都有一个 ListBox .这个项目跟踪我们需要购买的杂货。 (不,这不是家庭作业,这是给我妻子的。)所以我有一个列表 ShoppingListItem s,每个都有一个 Name和一个 Needed属性:true当我们需要元素时,false在我们购买之后。

所以这三个选项卡是全部、已购买和需要。他们应该都指向相同的 ShoppingListItemCollection (继承自 ObservableCollection<ShoppingListItem> )。但是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com