我有多个用户控件,我想在列表框中显示它们 让我们假设我有一个Employee抽象用户控件,并且我有两个或多个用户控件,而不是像AdministrativeEmployee和FactoryEmployee这样的员工用于每个这些雇员我有不同的数据,但UserControl是非常相似的(相同的大小,几乎相同的领域),在ViewModel方面我有一个抽象的EmployeeViewModel,AdministrativeEmployeeViewModel和FatoryEmployeeViewModel,在EmployeesView我有ListBox与数据绑定和EmployeesViewModel我有一个ICollection员工WPF将多个用户控件绑定到列表框
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; }
但是,告诉我System.ItemTemplate在列表框,而不是为每种类型的员工
的用户控件
这是一个错字? 'ItemsSource = {Binding Employees}'应该是'ItemsSource =“{Binding Employees}”'。没有绑定的DataTrigger是无用的。 – LPL
看起来你在这里使用的是一个非常迂回的方法。为什么不直接用Type指定DataTemplates?这将自动呈现每个类型及其分配的模板。 – McGarnagle