Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 获取视图&;来自插件的ViewModel_C#_Wpf_Plugins_Data Binding_Mvvm - Fatal编程技术网

C# 获取视图&;来自插件的ViewModel

C# 获取视图&;来自插件的ViewModel,c#,wpf,plugins,data-binding,mvvm,C#,Wpf,Plugins,Data Binding,Mvvm,我有一个使用插件的应用程序。每个插件都是按照MVVM开发的,所以我有一个视图,绑定到视图模型中。如下图所示: 在我的应用程序中,我有一个设计器,当我在ViewModels列表中添加任何ViewModel时,它的视图将显示在设计器中 我的问题是:在我的列表中添加插件的viewModel时,我如何保持这个绑定??如何使其视图显示在我的设计器中?这是一个有趣的问题。。。像往常一样,有很多方法可以实现它 这取决于你的插件是什么 如果插件更加集成,而不是孤立。您应该考虑一些Factory类,例如命名为v

我有一个使用插件的应用程序。每个插件都是按照MVVM开发的,所以我有一个视图,绑定到视图模型中。如下图所示:

在我的应用程序中,我有一个设计器,当我在ViewModels列表中添加任何ViewModel时,它的视图将显示在设计器中


我的问题是:在我的列表中添加插件的viewModel时,我如何保持这个绑定??如何使其视图显示在我的设计器中?

这是一个有趣的问题。。。像往常一样,有很多方法可以实现它

这取决于你的插件是什么

如果插件更加集成,而不是孤立。您应该考虑一些
Factory
类,例如命名为
viewsolver
viewmodelsolver
。它们可以将
名称作为字符串
类型
,接口的
类型
或按约定工作

其目的是找到视图的VM,反之亦然,作为一个中心服务。该服务还应该定位插件VM或导入它们,例如使用MEF

有关更多信息,请访问谷歌的“查看优先”、“查看模型优先”、“查看模型婚姻”等

如果你的插件是完全充实的独立运行的组件。我建议主机应用程序的viewmodel中应该有一个插件组件列表。因此,模型将是一个组件,无论它是否包含视图和其他所有内容,因为托管应用程序将管理组件。因此,您将拥有一个绑定到内容控制的ObservableCollection。然后可以作为一个整体托管插件

这是两种可能的方式。。。就像我上面提到的,mvvm中没有“the”方法,它总是取决于您的用例。。。 但我希望这能指引你正确的方向


HTH

谢谢您的回答@Silverfighter!这让我更清楚了

我发现了一篇非常有趣的文章,它似乎适合我的问题

解决方案如下:


看来你选择了我的答案中的第二条路线,ninject很好。。。也请考虑MEF(),因为它是用于扩展应用程序