我创建了一个DataTemplateSelector类。我想将它应用于单个项目,因此它会根据某些条件选择模板。
基本上我希望在xaml中具有相同的功能:
% if myitem.A
<TextBlock Text="{Binding myitem.data }"/>
% else if myitem.B
<Button Content="{Binding myitem.data }"/>
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate A {
get;
set;
}
public DataTemplate B {
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container) {
var myitem = item as MyItem;
if (myitem.A)
return A;
else if (myitem.B)
return B;
return base.SelectTemplate(item, container);
}
}
我怎样才能做到这一点?
感谢。
答案 0 :(得分:4)
如果您有一个项目而不是项目列表,则可以使用ContentPresenter
和自定义ContentTemplate
来显示此项目。如您所知,ContentTemplate
可以使用您的TemplateSelector
:
<ContentPresenter x:Name="control">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<local:MyTemplateSelector Content="{Binding}">
<local:MyTemplateSelector.A>
<DataTemplate>
<TextBlock Text="null" />
</DataTemplate>
</local:MyTemplateSelector.A>
<local:MyTemplateSelector.B>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</local:MyTemplateSelector.B>
</local:MyTemplateSelector>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
这是我的TemplateSelector
:
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item == null)
return A;
return B;
}
此行添加了一些要显示的内容:
control.Content = "123";