在我的应用程序中,我正在处理一个ItemControl
。此项控件接收可观察集合。
正如你在上面看到的,BaseItemViewModel是一个抽象类。当我的应用程序启动时,moduleCatalog
通过发现加载模块。
每个模块都有一个继承自 BaseItemViewModel 的类
所以我不能像这样在项目控件中设置数据模板:
<DataTemplate>
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate>
<View:AdvancedSettingsView/>
</DataTemplate>
如果我使用模块发现,如何显示相应视图模型中的视图?
您是否查看过 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 ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />
并将您的数据模板设置为名称:
<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}">
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}">
<View:AdvancedSettingsView/>
</DataTemplate>
类似的东西?