例如我们有:
public class CmdData
{
public CmdData(String text)
{
Text = text;
}
public CmdData(String text, ICommand command): this(text)
{
Command = command;
}
public String Text { get; set; }
public ICommand Command { get; set; }
}
它用作MenuItem的模型。 接下来,我将生成新实体CheckableCmdData(:CmdData),并希望在ToolBar和Menu中使用它们。
在菜单中CheckableCmdData是一个IsIckable =“True”的MenuItem。在工具栏中,它是一个CheckBox。
我有一个DataTemplate For Menu 为同一模型创建DataTemplate的适当方法是什么,但对于不同的控件,或者我应该使用样式吗?
答案 0 :(得分:0)
您可以创建单独的数据模板,为它们分配不同的资源键,并为特定控件应用适当的模板。
<DataTemplate x:Key="MenuCmdDataTemplate"
DataType="{x:Type local:CmdData}">
<TextBlock Text="{Binding Text}" />
</DataTemplate>
<DataTemplate x:Key="MenuCheckableCmdDataTemplate"
DataType="{x:Type local:CheckableCmdData}">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Text}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="ToolBarCmdDataTemplate"
DataType="{x:Type local:CmdData}">
<TextBlock Text="{Binding Text}"
Foreground="Red"/>
</DataTemplate>
<DataTemplate x:Key="ToolBarCheckableCmdDataTemplate"
DataType="{x:Type local:CheckableCmdData}">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked}"/>
<TextBlock Text="{Binding Text}"
Foreground="Green"/>
</StackPanel>
</DataTemplate>
用法:
<StackPanel>
<ToolBar VerticalAlignment="Top">
<Button Content="{Binding}"
ContentTemplate="{StaticResource ToolBarCmdDataTemplate}"
DataContext="{Binding CmdData1}"/>
<Button Content="{Binding}"
ContentTemplate="{StaticResource ToolBarCheckableCmdDataTemplate}"
DataContext="{Binding CmdData2}"/>
</ToolBar>
<Menu VerticalAlignment="Top">
<MenuItem Header="Group">
<MenuItem HeaderTemplate="{StaticResource MenuCmdDataTemplate}"
DataContext="{Binding CmdData1}"
Header="{Binding}"/>
<MenuItem HeaderTemplate="{StaticResource MenuCheckableCmdDataTemplate}"
DataContext="{Binding CmdData2}"
Header="{Binding}"/>
</MenuItem>
</Menu>
</StackPanel>
答案 1 :(得分:0)
我的解决方案是ItemTemplateSelector的实现。