我有一个IList绑定到a的viewmodels TabControl.这IList不会改变整个生命周期TabControl.
<TabControl ItemsSource="{Binding Tabs}" SelectedIndex="0" >
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Content" Value="{Binding}" />
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
每个viewmodel都有一个DataTemplate在a中指定的ResourceDictionary.
<DataTemplate TargetType={x:Type vm:MyViewModel}>
<v:MyView/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
DataTemplate中指定的每个视图都是资源密集型的,足以创建我只想创建每个视图一次,但是当我切换选项卡时,会调用相关视图的构造函数.从我所读到的,这是预期的行为TabControl,但我不清楚调用构造函数的机制是什么.
我已经看过一个使用UserControls 的类似问题,但是那里提供的解决方案需要我绑定到不受欢迎的视图.
在我们的产品中,我们使用MVVM模型的第一种方法,它很好地工作,但有一点需要注意.当视图变得复杂时,从数据模板创建它需要时间.如果经常显示和隐藏视图,它会变得有点刺激.如果首先使用视图,那么在需要时缓存视图会很容易 - 但是当首先使用DataTemplate和模型时,我们对视图创建没有太多控制.有没有人在没有切换到第一种方法的情况下解决了这个问题?