本文介绍了MVVM-相同类型的多个ViewModel->视图的单一实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含属性WorkSpaces的ViewModel:

public ObservableCollection < ServiceViewModel > WorkSpaces {get; set;}

public ObservableCollection<ServiceViewModel> WorkSpaces{get; set;}

WorkSpaces I绑定到ContentControl,该ContentControl包含一个包含TabControl的DataTemplate作为ItemTemplate

< ContentControl 内容 =&"; { Binding 路径 = WorkSpaces}" ContentTemplate =&; { StaticResource WorkspacesTemplate }" />

<ContentControl Content="{Binding Path=WorkSpaces}"        ContentTemplate="{StaticResource WorkspacesTemplate}" />

< DataTemplate x : Key =" WorkspacesTemplate">

< TabControl IsSynchronizedWithCurrentItem =真"

ItemTemplate =" { StaticResource ClosableTabItemTemplate }"

         ItemTemplate="{StaticResource ClosableTabItemTemplate}"

ItemsSource =" { 绑定 }"; >

</ TabControl >

</ DataTemplate >

另外我有一个将ServiceViewModel连接到ServiceView的DataTemplate:

< DataTemplate DataType =""{ x : Type vm : ServiceViewModel }">

<DataTemplate DataType="{x:Type vm:ServiceViewModel}">

< v : ServiceView />

    <v:ServiceView/>   

</ DataTemplate >

如果我执行以下代码,将创建一个新视图并将其显示为UserInterface中的外观:

WorkSpaces.添加(新ServiceViewModel);

因为我有一个TabControl可以添加另一个ServiceViewModel:

WorkSpaces.添加(新的ServiceViewModel); //WorkSpaces包含两个ServiceViewModels

问题因为第一个ServiceViewModel的视图也连接到第二个ServiceViewModel,所以现在两者都具有相同的视图,没有实例化该视图的新实例.有没有一种方法可以强制WPF创建视图的新实例?还是有其他方法可以解决此问题?

Reagrds Koert

推荐答案

< v : ServiceView />

    < v : ServiceView />    

</ DataTemplate >

< DataTemplate 共享 =" False" DataType =&"; { x : Type vm : ServiceViewModel }">

< DataTemplate Shared ="False" DataType ="{ x : Type vm : ServiceViewModel }">

< v : ServiceView />

    < v : ServiceView />    

</ DataTemplate >


这篇关于MVVM-相同类型的多个ViewModel->视图的单一实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-21 00:54