我现在正在解决一个问题,我需要在另一个UserControl中嵌入UserControl。但是,我需要在运行时确定要实例化哪个嵌入式UserControl。
这对我来说意味着必须调用某种形式的数据绑定和/或模板选择机制,但我不确定如何继续使用纯XAML方法。
如果我要使用代码执行此操作,我将在父UserControl中定义某种容器控件,然后在代码隐藏中实现一些逻辑,这些逻辑将实例化相应的子UserControl,然后将其作为Content插入父UserControl中指定的容器。
这可以仅使用XAML完成,还是需要某种代码隐藏?
答案 0 :(得分:1)
我假设您从WPF开始,如果我是对的,您希望在XAML中更多地使用ItemsControl并将ItemsSource(DataObjects的集合)设置为它,然后定义ItemsControl.ItemsTemplate以提供DataObject的相应DataTemplate。 Rest完全由数据驱动,您不必担心任何实例化,WPF将完成所有这些视觉创建。
答案 1 :(得分:1)
如果孩子UserControl
的选择基于DataContext
的类型,最好的方法是使用ContentControl
和DataTemplate
个<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中完成的方式