从XAML中选择UserControl

时间:2010-03-25 16:22:20

标签: xaml templates user-controls selection

我现在正在解决一个问题,我需要在另一个UserControl中嵌入UserControl。但是,我需要在运行时确定要实例化哪个嵌入式UserControl。

这对我来说意味着必须调用某种形式的数据绑定和/或模板选择机制,但我不确定如何继续使用纯XAML方法。

如果我要使用代码执行此操作,我将在父UserControl中定义某种容器控件,然后在代码隐藏中实现一些逻辑,这些逻辑将实例化相应的子UserControl,然后将其作为Content插入父UserControl中指定的容器。

这可以仅使用XAML完成,还是需要某种代码隐藏?

2 个答案:

答案 0 :(得分:1)

我假设您从WPF开始,如果我是对的,您希望在XAML中更多地使用ItemsControl并将ItemsSource(DataObjects的集合)设置为它,然后定义ItemsControl.ItemsTemplate以提供DataObject的相应DataTemplate。 Rest完全由数据驱动,您不必担心任何实例化,WPF将完成所有这些视觉创建。

答案 1 :(得分:1)

如果孩子UserControl的选择基于DataContext的类型,最好的方法是使用ContentControlDataTemplate<ContentControl Content="{Binding SomeProperty"}> <ContentControl.Resources> <DataTemplate DataType="{x:Type local:Foo}"> <local:UserControlForTypeFoo /> </DataTemplate> <DataTemplate DataType="{x:Type local:Bar}"> <local:UserControlForTypeBar /> </DataTemplate> </ContentControl.Resources> </ContentControl> 在资源中:

ContentControl

DataTemplate会根据SomeProperty的类型选择合适的{{1}}。这就是它通常在MVVM中完成的方式