Wpf 带有多个ItemTemplateSelector的ItemsControl
我有一个ScrollViewer: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 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);
}
}