在 ItemsControl 中查看注入 [英] View Injection inside ItemsControl

查看:61
本文介绍了在 ItemsControl 中查看注入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我正在处理一个 ItemControl.此 itemControl 接收一个 ObservableCollection.

In my application, I'm dealing with an ItemControl. This itemControl receives an ObservableCollection.

如上所示,BaseItemViewModel 是一个抽象类.当我的应用程序启动时,moduleCatalog 通过发现加载模块.

As you can see above, BaseItemViewModel is an abstract class. And when my application is launching, moduleCatalog loads the modules by discovery.

每个模块都有一个继承自 BaseItemViewModel 的类

Each module has a class inherited from BaseItemViewModel

所以我不能像这样在 ItemsControl 中设置 dataTemplates:

So I can't set the dataTemplates in ItemsControl like this:

<DataTemplate> 
    <View:GeneralSettingsView/> 
</DataTemplate> 
<DataTemplate> 
    <View:AdvancedSettingsView/> 
</DataTemplate> 

如果我使用 Module Discovery,我可以做什么来显示来自相应视图模型的视图?

What can I do to show the view from the respective view model if I'm using Module Discovery?

推荐答案

您是否查看了 ItemTemplateSelector 属性?

Have you looked at the ItemTemplateSelector property?

例如,创建一个内容选择器类:

For example, create a content selector class:

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;
    }
}

为它创建一个静态资源:

Create a static resource for it:

<local:myContentSelector x:Key="contentSelector" />

并在ItemsControl中设置:

And set in the ItemsControl:

<ItemsControl ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />

并将您的数据模板设置为名称:

And set your datatemplates to the names:

<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}"> 
    <View:GeneralSettingsView/> 
</DataTemplate> 
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}"> 
    <View:AdvancedSettingsView/> 
</DataTemplate> 

类似的东西?

这篇关于在 ItemsControl 中查看注入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆