.net 如何使用MVVM Light Toolkit在Silverlight中为TabControl动态创建具有视图和视图模型的新TabItems?

.net 如何使用MVVM Light Toolkit在Silverlight中为TabControl动态创建具有视图和视图模型的新TabItems?,.net,silverlight,mvvm-light,.net,Silverlight,Mvvm Light,我是Silverlight和MVVM Light工具包的初学者,不知道如何正确解决以下情况: 我有以下视图及其相应的视图模型: 主视图,迪奥启动页 TabControlView,带有单个Tabcontrol的视图,放置在主视图上 AllBugsGridView、datagrid和所有Bug BugDetailView,显示单个bug详细信息的视图,或者可以添加新bug的视图。。(数据字段、标签等) 现在我的目标是: 我想要一个包含AllBugsGridView内容的选项卡项。(没问题) 现在

我是Silverlight和MVVM Light工具包的初学者,不知道如何正确解决以下情况:

我有以下视图及其相应的视图模型:

  • 主视图,迪奥启动页
  • TabControlView,带有单个Tabcontrol的视图,放置在主视图上
  • AllBugsGridView、datagrid和所有Bug
  • BugDetailView,显示单个bug详细信息的视图,或者可以添加新bug的视图。。(数据字段、标签等)
现在我的目标是:
我想要一个包含AllBugsGridView内容的选项卡项。(没问题) 现在,当用户双击datagrid中的项目时,应该创建一个新的tabItem,其中包含bugDetailView,显示网格项目的详细信息。应该可以有用户想要的任意多个打开的选项卡项

此外,用户可以在按钮上添加一个新的Bug,并打开一个带有空bugDetailView的新选项卡

有没有人能找到合适的解决办法。我不知道如何动态创建新视图和视图模型,并将它们连接在一起

非常感谢你的回答

致意


Hans

在这里看一下我的示例项目。虽然它不使用MVVM Light,但可以很容易地修改它以使用它。主要思想是将选项卡定义为“区域”,并且您有一个了解如何使用选项卡控件的区域管理器。然后,您只需将视图路由到该区域,并让它处理其余部分


如果将TabControls源绑定到ViewModelBase的ObservableCollection类型的viewmodel属性,则可以根据需要向集合中添加新的ViewModels或删除。这使ViewModels只能看到自己,而不能看到视图。对于将源绑定到集合之外的视图端,还可以将视图和ViewModels设置为datatemplate和adorner对

<Window.Resources>
    <DataTemplate DataType="{x:Type VM:ChangePasswordVM}">
        <AdornerDecorator>
            <localUserControls:ChangePasswordView />
        </AdornerDecorator>
    </DataTemplate>
</Window.Resources>