这里的问题是,TabControl的instantiaties每个选择其他选项卡项目时其内容的新的DataTemplate,所以你的观点是重建的一切设置为默认值。您必须实现一种机制以对给定视图模型拥有唯一视图。如果没有MVVM,你只需要在ViewModel中添加一个View属性,但这在很大程度上破坏了MVVM的目的。
编辑下面你的意见:我的意思是,每当你切换选项卡,TabControl将使用DataTemplate中的新可视化树显示其内容。
让我们举个例子:
您选择标签#1,它的内容是CustomerViewModel。从DataTemplate创建一个新的可视化树(来自NewCustomerView),并显示在TabControl上。插入符号在第一个文本框中,选项卡的第一个索引被选中,等等。
您选择了选项卡#2。来自选项卡#1的内容不再在视觉树中被丢弃。标签#2中的内容将遵循与1.相同的过程来构建树。
再次选择标签#1。来自选项卡#2的内容不再在视觉树中被丢弃。在这里,同样的机制再次激活。从DataTemplate构建一个新的可视化树,其中一切都处于默认状态。 Woops!但是这很正常,因为WPF的ContentPresenter不会为内容的每一个内容都保存一次内容树。
=>理论上的解决方案,建立自己的视觉。例如,在一个完全不完美的世界中,在CustomViewModel中创建一个独特的NewCustomerView,并通过一个属性公开它,ley的视图。你会使用新的DataTemplate将是:
<DataTemplate DataType="{x:Type CustomerViewModel}">
<ContentPresenter Content="{Binding View}" />
</DataTemplate>
瞧,当从模板创建的可视化树,主持人将是一个完全新的一个,但风景独特的,不会重新创建,因此插入符号将位于用户离开它的同一位置,这与制表符相同。但是,就像我之前说过的,这与MVVM哲学根本不一样。尝试构建一个静态类,它能够为给定的ViewModel或类似的东西返回一个唯一的视图。
另一种解决方案将添加到您的ViewModel像SelectedTabIndex的东西,并绑定它们,CurrentFocusPosition等,但这是完全与我有关的视图。
如果你删除了你的vin目录和你的subversion dirs,它会使zip变得更小:-) – 2009-10-07 14:07:15
对不起,bin目录。 – 2009-10-07 14:08:18
我重新上传了没有svn和bin dirs的文件,thx的建议。现在它的大小约为900KB – 2009-10-07 14:12:31