【问题标题】:Updating a parent collection based on a child binding in UWP基于 UWP 中的子绑定更新父集合
【发布时间】:2017-01-20 17:09:24
【问题描述】:

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

<ItemsControl ItemsSource="{Binding ProductCategories, Mode=TwoWay}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <ToggleButton IsChecked="{Binding IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                            <TextBlock Text="{Binding CategoryName}"/>
                        </ToggleButton>

然后我有第二个项目集合,在我的视图模型中,它基于一个查询,依赖于上述集合。

所以,我的要求是根据上述类别过滤产品列表。我遇到的问题是上面的绑定是到 ProductCategory 的;因此,虽然该集合为 ProductCategory 上的“IsSelected”属性正确触发,但它不会通知“ProductCategories”已更改。

ProductCategories 定义为:

public class ProductCategories : ObservableCollection<ProductCategory>

我的第一个想法是我可以通过使用 DataTrigger 来实现这一点;但是,这些似乎自 WinRT 以来不可用。我也可以为此使用某种消息通知,但我觉得这应该可以直接通过 XAML 绑定实现。

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

【问题讨论】:

    标签: c# xaml binding uwp


    【解决方案1】:

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

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

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      使用此 nuget 包 https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Uwp.Managed 在 UWP 中可以使用 DataTriggers

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

      使用它,您可以使用绑定到 IsSelected 的 DataTrigger 调用 Command。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 2013-01-21
        相关资源
        最近更新 更多