在我的申请中,我正在处理ItemControl
。此itemControl接收ObservableCollection。
如上所示,BaseItemViewModel是一个抽象类。当我的应用程序启动时,moduleCatalog
通过发现加载模块。
每个模块都有一个继承自BaseItemViewModel
的类所以我不能像这样在ItemsControl中设置dataTemplates:
<DataTemplate>
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate>
<View:AdvancedSettingsView/>
</DataTemplate>
如果我正在使用模块发现,我该怎么做才能从相应的视图模型中显示视图?
答案 0 :(得分:3)
你看过ItemTemplateSelector属性吗?
例如,创建一个内容选择器类:
public class myContentSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item != null)
{
VMBase vm = item as VMBase;
switch (vm.Type)
{
case myType.General:
return Application.Current.Resources["GeneralSettings"] as DataTemplate;
default:
return Application.Current.Resources["AdvancedSettings"] as DataTemplate;
}
}
return null;
}
}
为它创建一个静态资源:
<local:myContentSelector x:Key="contentSelector" />
并在ItemsControl中设置:
<ItemsControl ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />
并将您的datatemplates设置为名称:
<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}">
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}">
<View:AdvancedSettingsView/>
</DataTemplate>
那样的东西?