我的App.XAML上有一个DataTemplate
<DataTemplate DataType="{x:Type ViewModels:MSMemberViewModel}">
<Views:MSMemberView>
</Views:MSMemberView>
</DataTemplate>
我用它在另一个视图中的tabcontrol中创建视图:
<TabControl ItemsSource="{Binding Tabs}" SelectedIndex="{Binding SelectedIndex}">
<TabControl.ItemTemplate>
//...
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding ViewModel}">
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Tabs是包含选项卡名称和ViewModel的对象的ObservableCollection。
每次向ObservableCollection添加一个新选项卡时都会实例化新的ViewModel(我知道这是因为每次添加新选项卡时都会调用构造函数),并且我的代码对选项卡名称进行编号(因为每个选项卡都有不同的选项)名称),但视图重复!我该如何解决这个问题?
编辑:
此外,ObservableCollection上的ViewModel都没有反映调试时实例化的ViewModel / View的当前值。
答案 0 :(得分:0)
因为我不知道字段绑定是如何实现的,所以这只是一个疯狂的猜测,但我认为你应该稍微更改DataTemplate
。像这样......
<!-- your stuff -->
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl DataContext="{Binding ViewModel}">
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
<!-- your stuff -->
答案 1 :(得分:0)
通过使用此答案中的Dennis代码扩展TabControl来管理解决我的问题:
Stop TabControl from recreating its children
根据Dennis的说法,“TabControl共享一个面板来呈现其内容”,这也许就是为什么我也遇到了问题。