属性 = ItemControl.ItemTemplate 的数据触发器

DataTrigger with Property = ItemControl.ItemTemplate

我在使此绑定生效时遇到了一些问题。我在 SettingCollection 中有几个对象,它们都有一个枚举 属性。我想根据 this 的值生成一个控件。但是当我用数据触发器检查这个值时它不起作用。

任何人都可以提供一些关于我如何才能做到这一点的见解吗?

    <Window.Resources>
        <DataTemplate x:Key="CheckboxNode">
            <CheckBox IsChecked="{Binding Status}" Margin="0,5,0,0">
                <ContentPresenter Content="{Binding DisplayName}"/>
            </CheckBox>
        </DataTemplate>
        <DataTemplate x:Key="TextboxNode">
            <TextBox Text="Badgers"></TextBox>
        </DataTemplate>
</Window.Resources>
 <ItemsControl ItemsSource="{Binding SettingCollection}">
                    <ItemsControl.Style>
                        <Style TargetType="ItemsControl">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Type}" Value="checkbox">
                                    <Setter Property="ItemsControl.ItemTemplate" Value="{StaticResource CheckboxNode}" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Type}" Value="textbox">
                                    <Setter Property="ItemsControl.ItemTemplate" Value="{StaticResource TextboxNode}" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </ItemsControl.Style>
                </ItemsControl>

如果 Type 属性 在 SettingNode class 中,并且 SettingCollection 是 SettingNode 对象的集合,那么您在 Datatriggers 中的绑定是不正确的。 DataTriggers 将在 ItemsControl DataContext(class with SettingCollection)中查找类型 属性。尝试使用 DataTemplateSelector https://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector(v=vs.110).aspx