根据DataContext的类型选择用户控件
我试图在WPF中构建一套典型的CRUD维护表单 - 除了它们处理不同的数据库记录之外,它们几乎是相同的。
我没有为每个数据库创建一个新的窗口类,而是试图使用一个窗口类为每个数据库表实例化一个不同的ViewModel类,并且为每个ViewModel定义了不同的UserControl。
因此,如果我将其DataContext设置为Record1ViewModel实例的窗口实例化,我想使用Record1UserControl将其显示在窗口中,如果它设置为Record2ViewModel的实例,我想使用Record2UserControl显示它。
我已验证两个用户控件都可以正常工作,方法是直接在窗口的XAML中定义它们。 但我还没有想出如何根据ViewModel的类型选择其中之一。
这不起作用:
<myWindow.Resources>
<DataTemplate x:Key="{x:Type ViewModels:Record1ViewModel}">
<MaintenanceControls:Record1 />
</DataTemplate>
<DataTemplate x:Key="{x:Type ViewModels:Record2ViewModel}">
<MaintenanceControls:Record1 />
</DataTemplate>
</myWindow.Resources>
<ContentPresenter Content="{Binding}" />
我在ContentPresenter中得到的是该类型的名称。 DataTemplates不使用。
有任何想法吗?
您可以使用DataTemplateSelector为动态选择DataTemplate
在运行时的东西沿着线
public class TaskListDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Task)
{
Task taskitem = item as Task;
if (taskitem.Priority == 1)
return
element.FindResource("importantTaskTemplate") as DataTemplate;
else
return
element.FindResource("myTaskTemplate") as DataTemplate;
}
return null;
}
}
链接地址: http://www.djcxy.com/p/56915.html