C# MVVM显示器OberservableCollection<;ViewModel>;具有未知的用户控件
我有点被当前的项目卡住了,希望有人能帮我摆脱困境 我的应用程序与插件一起工作,以便用户能够向应用程序添加附加功能。现在我希望配置窗口的样式相同(可能插件需要某种配置) 配置窗口加载所有插件并从插件获取配置视图模型。所有ViewModels都存储在ObservableCollection中。这些视图模型应显示在选项卡控件中(每个视图模型一个选项卡) 但是我不知道插件使用的是什么类型的用户控件,因为插件有自己的用户控件用于配置。 否则,我将创建一个TabControl,将其ItemsSource绑定到ObservableCollection,并在资源(DataTemplates)中指定UserControl 但是如果用户控件在编译时未知,该如何做呢 我曾考虑过用ObservableCollection代替ViewModels,但我对此并不满意,甚至不知道这是否可行 你知道怎么处理吗 亲切问候,C# MVVM显示器OberservableCollection<;ViewModel>;具有未知的用户控件,c#,wpf,mvvm,user-controls,datatemplate,C#,Wpf,Mvvm,User Controls,Datatemplate,我有点被当前的项目卡住了,希望有人能帮我摆脱困境 我的应用程序与插件一起工作,以便用户能够向应用程序添加附加功能。现在我希望配置窗口的样式相同(可能插件需要某种配置) 配置窗口加载所有插件并从插件获取配置视图模型。所有ViewModels都存储在ObservableCollection中。这些视图模型应显示在选项卡控件中(每个视图模型一个选项卡) 但是我不知道插件使用的是什么类型的用户控件,因为插件有自己的用户控件用于配置。 否则,我将创建一个TabControl,将其ItemsSource绑定
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)时,你可以扫描你应用程序中的插件并自动生成数据模板。