在UWP

时间:2016-09-13 07:19:20

标签: c# xaml binding uwp

我有一个项目集合,我已绑定到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绑定实现的。

所以,我的问题是,当更改子类时,是否可以引发父类已更改的通知。

2 个答案:

答案 0 :(得分:1)

使用此nuget包https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Uwp.Managed

在UWP中提供了DataTriggers

此处指向wiki https://github.com/Microsoft/XamlBehaviors/wiki/DataTriggerBehavior

的链接

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

答案 1 :(得分:0)

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

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

希望它有所帮助。