代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

是否可以使用DataTrigger设置ComboBox的SourceItem?

  •  -1
  • Álvaro García  · 技术社区  · 6 年前

    我的视图模型中有三个集合,一个用于类别1的项,另一个用于类别2的项,另一个用于类别3的项。

    另外,我还有一个属性,它是IDCategory,属于视图模型的类别。

    我的视图中有一个组合框,如果视图模型的属性IDCategory为1,我希望绑定到第一个集合;如果属性IDCategory为2,则绑定第二个集合;如果IDCategory为3,则绑定最后一个集合。

    我尝试用这种方式使用DataTrigger:

    <ComboBox.ItemTemplate>
                                        <DataTemplate>
                                            <DataTemplate.Triggers>
                                                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}" Value="1">
                                                    <Setter Property="ItemsSource" Value="{Binding MyCollection1}"/>
                                                </DataTrigger>
                                                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}" Value="2">
                                                    <Setter Property="ItemsSource" Value="{Binding MyCollection2}"/>
                                                </DataTrigger>
                                                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}" Value="3">
                                                    <Setter Property="ItemsSource" Value="{Binding MyCollection3}"/>
                                                </DataTrigger>
                                            </DataTemplate.Triggers>
                                        </DataTemplate>
                                    </ComboBox.ItemTemplate>
    

    但是itemssource在datatrigger集合中不可用,所以我想知道这种解决方案是否真的可行。

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Clemens    6 年前

    触发器应采用组合框样式:

    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}"
                             Value="1">
                    <Setter Property="ItemsSource" Value="{Binding MyCollection1}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}"
                             Value="2">
                    <Setter Property="ItemsSource" Value="{Binding MyCollection2}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=myUserControl, Path=DataContext.IDCategory}"
                             Value="3">
                    <Setter Property="ItemsSource" Value="{Binding MyCollection3}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>