基于UWP中的子绑定更新父集合

本文关键字:更新 集合 绑定 UWP 基于 | 更新日期: 2023-09-27 18:06:49

我有一个项目集合,我已将其绑定到ItemsControl:

<ItemsControl ItemsSource="{Binding ProductCategories, Mode=TwoWay}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ToggleButton IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                            <TextBlock Text="{Binding CategoryName}"/>
                        </ToggleButton>
然后,我有第二个项目集合,在我的视图模型中,它是基于查询的,依赖于上面的集合。

因此,我的要求是根据上述类别筛选产品列表。我遇到的问题是,上面的绑定是一个ProductCategory;所以,当set正确地为ProductCategory上的'IsSelected'属性触发时,它不会通知'ProductCategories'已经改变了。

ProductCategories定义为:

public class ProductCategories : ObservableCollection<ProductCategory>

我的第一个想法是,我可以通过使用一个数据触发器来实现这一点;然而,这些似乎在WinRT之后就不再可用了。我也可以为此使用某种消息通知,但我觉得这应该直接从XAML绑定中实现。

所以,我的问题是,当子类发生变化时,是否可能引发父类发生变化的通知

基于UWP中的子绑定更新父集合

数据触发器可以在UWP中使用这个nuget包https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Uwp.Managed

这里是到wiki的链接https://github.com/Microsoft/XamlBehaviors/wiki/DataTriggerBehavior

使用此方法,您可以使用绑定到IsSelected的DataTrigger调用Command。

所以您试图通过从另一个集合(ProductCategories)中选择的项目来过滤一个集合(Products?) ?

如果是这样,你似乎有点想多了。从您的ProductCategory类中删除任何'IsSelected'概念,因为它与显示相关,不属于您的模型。然后将ProductCategories ItemsControl更改为ListBox并绑定ListBox。SelectedItem到视图模型中的'SelectedProductCategory'属性为Mode=TwoWay, UpdateSourceTrigger=PropertyChanged。当用户在ListBox中选择一个项目时,'SelectedProductCategory' setter将被调用,此时您可以过滤第二个集合(如果集合不支持更改通知,请记住调用PropertyChanged)。

希望能有所帮助。