查看项目控件内的注入



在我的应用程序中,我正在处理一个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> 

类似的东西?

最新更新