在XAML中,我可以声明一个DataTemplate,以便在显示特定类型时使用该模板.例如,此DataTemplate将使用TextBlock显示客户的名称:
<DataTemplate DataType="{x:Type my:Customer}">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以定义一个将在IList <Customer>显示时使用的DataTemplate.因此,如果ContentControl的内容是ObservableCollection <Customer>,它将使用该模板.
是否可以使用{x:Type}标记扩展在XAML中声明类似IList的泛型类型?
我有一个托管其他控件的用户控件.我实现这一点的方法是通过数据模板来定义应该与特定视图模型相关联的控件.这些视图模型具有类似的属性和交互触发器.请参阅下面的XAML代码段.
这种方法的问题是,如果我想支持新的视图模型,我将不得不复制粘贴数据绑定.有没有办法将所有类似的数据绑定和/或触发器整合到一个模板中?我不想将相同的数据绑定定义键入/复制粘贴到每个控件中.(是的,我知道,我很懒.)
<UserControl.Resources>
<DataTemplate DataType="{x:Type vm:SomeViewModel1}">
<TextBlock Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<cmd:EventToCommand Command="{Binding MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SomeViewModel2}">
<Rectangle Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<cmd:EventToCommand Command="{Binding MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SomeViewModel3}">
<Button Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter"> …Run Code Online (Sandbox Code Playgroud)