【发布时间】:2013-10-17 21:19:54
【问题描述】:
我有多个用户控件,我想在 ListBox 上显示它们 假设我有一个员工抽象用户控件,并且我有 2 个或更多用户控件,而不是为每个员工使用像 AdministrativeEmployee 和 FactoryEmployee 这样的员工我有不同的数据,但 UserControl 在 ViewModel 上非常相似(相同的大小,几乎相同的字段)我有一个抽象的 EmployeeViewModel、AdministrativeEmployeeViewModel 和 FatoryEmployeeViewModel,在EmployeesView 上我有带有数据绑定的ListBox,在EmployeesViewModel 上我有一个ICollectionEmployees
EmployeesView.xaml:
xmlns:local="clr-namespace:Solution.Controls"
-
<ListBox ItemsSource={Binding Employees}>
<ListBox.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}" Name="Presenter" />
<DataTemplate.Triggers>
<DataTrigger Value="{x:Type local:AdministrativeEmployeeView}">
<Setter TargetName="Presenter" Property="Content">
<Setter.Value>
<local:AdministrativeEmployeeView />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Value="{x:Type local:FactoryEmployeeView}">
<Setter TargetName="Presenter" Property="Content">
<Setter.Value>
<local:FactoryEmployeeView/>
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
EmployeesViewModel.cs:
public ICollection<EmployeeViewModel> Employees { get; set; }
但这显示了 ListBox 上的 System.ItemTemplate,而不是每种员工类型的 UserControls
【问题讨论】:
-
这是错字吗?
ItemsSource={Binding Employees}应该是ItemsSource="{Binding Employees}"。而且没有 Binding 的 DataTrigger 是没用的。 -
您似乎在这里使用了一种非常迂回的方法。为什么不直接定义指定类型的 DataTemplates?这将使用分配的模板自动呈现每种类型。
标签: c# wpf inheritance user-controls listbox