WPF中是否有某种方法可以获得相同的功能DataTemplateSelector
,但是对于UserControls?
假设我有一个StackView,我想绑定一个IEnumerable对象。我想要做的是以某种方式有一个映射,对于绑定的IEnumerable中的每个对象类型,查看对象类型并确定要添加到StackView的UserControl。
所以,给出了三个类:
public class House : Building{}
public class Apartment : Building{}
public class Tent : Building{}
其中每个类都继承自Building
并且有自己定义的UserControl
,我想将DataContext
设置为IEnumerable<Building>
并以某种方式让StackView填充它具有特定于类型的UserControl的子集。
我想用尽可能少的代码来做到这一点。数据绑定和XAML管道胶带越多越好。
答案 0 :(得分:6)
您可以在DataTemplate
中使用复杂的用户控件;只需将DataTemplate
声明为UserControl
即可。
示例:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="300" Width="300" Name="UI" >
<Window.Resources>
<DataTemplate DataType="{x:Type local:House}" >
<local:HouseUserControl DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Apartment}">
<local:ApartmentUserControl DataContext="{Binding}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox ItemsSource="{Binding ElementName=UI, Path=ListOfBuildings}" />
</Grid>
</Window>
答案 1 :(得分:2)
我不确定我是否看到了这个问题。只需在某处为资源中的每种类型创建DataTemplates,WPF将自动使用它们来呈现每种类型。