Wpf 带有多个ItemTemplateSelector的ItemsControl

Wpf 带有多个ItemTemplateSelector的ItemsControl,wpf,triggers,contenttemplate,contenttemplateselector,Wpf,Triggers,Contenttemplate,Contenttemplateselector,我有一个ScrollViewer: <ScrollViewer x:Name="myScrollViewer"> <ItemsControl x:Name="myItemsControl" ItemTemplateSelector="{DynamicResource myItemtemplateSelector}" ItemsPanel="{StaticResource myItemsPanel}" /> </ScrollViewer> 这条路对吗?嗯,

我有一个ScrollViewer:

<ScrollViewer x:Name="myScrollViewer">
  <ItemsControl x:Name="myItemsControl" ItemTemplateSelector="{DynamicResource myItemtemplateSelector}" ItemsPanel="{StaticResource myItemsPanel}" />
</ScrollViewer>

这条路对吗?

嗯,不,这条线错了:

<Setter Property="ContentTemplate" Value="{DynamicResource SubdisciplineDataTemplateSelector}" />
TemplateSelector
如下所示:

public class MyClass { public bool MyBoolean { get; set; } }
public class ThirdSelector : DataTemplateSelector
{
    private DataTemplateSelector _selector1 = new SubdisciplineDataTemplateSelector();
    private DataTemplateSelector _selector2 = new SubdisciplineDataTemplateSelector2();

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var obj = item as MyClass;

        if (obj == null)
            return null;

        if (obj.MyBoolean)
            return _selector1.SelectTemplate(item, container);
        else
            return _selector2.SelectTemplate(item, container);
    }
}
如果您想要/必须保留前两个选择器,请执行此操作。如果你能摆脱它们,就把它们删除,把所有的逻辑带到新的逻辑中去

这是一个通用的解决方案,如果您共享更多的代码和域对象,可能会有一个更适合您的解决方案。

我可能会尝试

public class ThirdSelector : DataTemplateSelector
{
    private DataTemplateSelector _selector1 = new SubdisciplineDataTemplateSelector();
    private DataTemplateSelector _selector2 = new SubdisciplineDataTemplateSelector2();

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var obj = item as MyClass;

        if (obj == null)
            return null;

        if (obj.MyBoolean)
            return _selector1.SelectTemplate(item, container);
        else
            return _selector2.SelectTemplate(item, container);
    }
}