我的UserControl资源部分中的代码:
<UserControl.Resources>
<DataTemplate x:Key="BillingLevel" DataType="{x:Type local:ViewBillingLevel}">
<local:ViewBillingLevel Width="Auto" Height="Auto"/>
</DataTemplate>
<DataTemplate x:Key="Suburb" DataType="{x:Type local:ViewSuburb}">
<local:ViewSuburb Width="Auto" Height="Auto" />
</DataTemplate>
</UserControl.Resources>
我想要进行绑定的部分:
<ContentControl Grid.Row="2" ContentTemplate="{StaticResource Suburb}" Margin="5" />
类似的东西:
<ContentControl Grid.Row="2" ContentTemplate="{StaticResource={Binding myDataTemplateKey}}" Margin="5" />
所以我可以在C#代码后面的DataTemplates之间切换。 我不知道这是否可行,或者如何以另一种方式实现这一目标。
感谢。
答案 0 :(得分:2)
您可以使用$(".add-icon").click(function(){
$("#emotepicker").toggle();
});
属性和ContentTemplateSelector
类来实现自定义模板选择逻辑:https://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.contenttemplateselector(v=vs.110).aspx
或者您可以使用隐式数据模板。删除DataTemplateSelector
属性:
x:Key
当您将<UserControl.Resources>
<DataTemplate DataType="{x:Type local:ViewBillingLevel}">
<local:ViewBillingLevel Width="Auto" Height="Auto"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewSuburb}">
<local:ViewSuburb Width="Auto" Height="Auto" />
</DataTemplate>
</UserControl.Resources>
的{{1}}属性设置或绑定到DataTemplate
/ Content
对象时,将自动应用相应的ContentControl
。< / p>
答案 1 :(得分:0)
你想要的是DataTemplateSelector
C#
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate BillingLevel
{
get;
set;
}
public DataTemplate Suburb
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if(item is ViewBillingLevel)
{
return BillingLevel;
}
if(item is ViewSuburb)
{
return Suburb;
}
return base.SelectTemplate(item, container);
}
}
XAML
<UserControl.Resources>
<DataTemplate x:Key="BillingLevel">
</DataTemplate>
<DataTemplate x:Key="Suburb">
</DataTemplate>
<selector:MyTemplateSelector x:Key="MyTemplateSelector"
Suburb="{StaticResource Suburb}"
BillingLevel="{StaticResource BillingLevel}"
/>
</UserControl.Resources>
<ContentControl Content="{Binding MyV}"
ContentTemplateSelector="{StaticResource MyTemplateSelector}"
/>
MyV
是要绑定的ViewModel - 因此DataTemplateSelector
决定使用哪个模板。
<强> Extendend:强>
如果您只有一个ViewModel
- 您可以使用属性来切换模板。例如
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate BillingLevel
{
get;
set;
}
public DataTemplate Suburb
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
MyViewModel value = item as MyViewModel;
if(value.IsSuburb)
{
return Suburb;
}
else
{
return BillingLevel;
}
return base.SelectTemplate(item, container);
}
}