Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM显示器OberservableCollection<;ViewModel>;具有未知的用户控件_C#_Wpf_Mvvm_User Controls_Datatemplate - Fatal编程技术网

C# MVVM显示器OberservableCollection<;ViewModel>;具有未知的用户控件

C# MVVM显示器OberservableCollection<;ViewModel>;具有未知的用户控件,c#,wpf,mvvm,user-controls,datatemplate,C#,Wpf,Mvvm,User Controls,Datatemplate,我有点被当前的项目卡住了,希望有人能帮我摆脱困境 我的应用程序与插件一起工作,以便用户能够向应用程序添加附加功能。现在我希望配置窗口的样式相同(可能插件需要某种配置) 配置窗口加载所有插件并从插件获取配置视图模型。所有ViewModels都存储在ObservableCollection中。这些视图模型应显示在选项卡控件中(每个视图模型一个选项卡) 但是我不知道插件使用的是什么类型的用户控件,因为插件有自己的用户控件用于配置。 否则,我将创建一个TabControl,将其ItemsSource绑定

我有点被当前的项目卡住了,希望有人能帮我摆脱困境

我的应用程序与插件一起工作,以便用户能够向应用程序添加附加功能。现在我希望配置窗口的样式相同(可能插件需要某种配置)

配置窗口加载所有插件并从插件获取配置视图模型。所有ViewModels都存储在ObservableCollection中。这些视图模型应显示在选项卡控件中(每个视图模型一个选项卡)

但是我不知道插件使用的是什么类型的用户控件,因为插件有自己的用户控件用于配置。 否则,我将创建一个TabControl,将其ItemsSource绑定到ObservableCollection,并在资源(DataTemplates)中指定UserControl

但是如果用户控件在编译时未知,该如何做呢

我曾考虑过用ObservableCollection代替ViewModels,但我对此并不满意,甚至不知道这是否可行

你知道怎么处理吗

亲切问候,


SyLuS

您可以使用
ContentControl
来实现这一点

它用于根据视图模型显示视图。 在xaml中,您可以指定应该显示哪个视图。基于当前数据上下文的viewmodel

<ContentControl>
    <ContentControl.Resources>
        <DataTemplate DataType="{x:Type vm:MyViewModel}">
            <v:MyView/>
        </DataTemplate>
    </<ContentControl.Resources>
</ContentControl>


插件应该有一些通用的接口HI,如果是插件,你必须检索“IUserControl”元素(内部可以创建自己的viewmodel等等)——插件的viewmodel模板不是应用程序的角色。所以你不能束缚自己tabs@Lei杨:我写了一个通用接口来确保“SaveConfiguration”、“LoadConfiguration”、“ResetToDefault”等功能。。。这不是问题。@GCamel:我就是这么做的,“插件”必须有一个方法“GetConfigurationViewModel”,用于初始化和返回配置的ViewModel。我还可以确保使用“GetConfigurationView”方法从插件获取用户控件。但是,将ViewModel和View/ViewModel绑定到我的配置窗口L中的最佳方法是什么?您不能。通常的方法是将viewmodel集合绑定到tab控件,但您不拥有视图的插件datatemplate定义……因此,在这种情况下,您必须调用GetConfigurationView并将视图置于tab-no MVVM模式中。或者你必须找到一种方法,将插件中的dict xaml包含在你的应用程序中(基于命名),以便选项卡可以解析模板?非常感谢你使用“PRISM”的想法,我将看看这个。你明白了,你的例子就是我在静态环境下所做的。但是我不知道PRISM是一个功能强大的插件系统。我用4.0版本构建了一个大应用程序。嗯,这只是一个想法:当你的viewmodels和models实现一个标记界面(例如IAmAViewModel和IAmAView)时,你可以扫描你应用程序中的插件并自动生成数据模板。