为了账号安全,请及时绑定邮箱和手机立即绑定

如何在TabControl中的选项卡项中保留控件状态

如何在TabControl中的选项卡项中保留控件状态

我是WPF的新手,它试图按照约什·史密斯(Josh Smith)出色的文章(描述模型-视图-视图模型设计模式)的建议构建项目。使用Josh的示例代码作为基础,我创建了一个简单的应用程序,其中包含许多“工作区”,每个工作区均由TabControl中的一个选项卡表示。在我的应用程序中,工作区是一个文档编辑器,它允许通过TreeView控件来操纵分层文档。尽管我已经成功打开了多个工作区并在绑定的TreeView控件中查看了它们的文档内容,但我发现TreeView在选项卡之间切换时会“忘记”其状态。例如,如果Tab1中的TreeView被部分展开,则在切换到Tab2并返回到Tab1后,它将显示为完全折叠。此行为似乎适用于所有控件的控件状态的所有方面。经过一些试验,我意识到我可以通过将每个控件状态属性显式绑定到基础ViewModel上的专用属性来保留TabItem中的状态。但是,当我只是希望所有控件在工作区之间切换时记住所有控件的状态时,这似乎是很多额外的工作。我想我缺少一些简单的东西,但是我不确定在哪里寻找答案。任何指导将不胜感激。谢谢,蒂姆更新:根据要求,我将尝试发布一些代码来演示此问题。但是,由于TreeView的基础数据很复杂,因此我将发布一个简化的示例,以显示相同的症状。这是主窗口中的XAML:<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Docs}">    <TabControl.ItemTemplate>        <DataTemplate>            <ContentPresenter Content="{Binding Path=Name}" />        </DataTemplate>    </TabControl.ItemTemplate>    <TabControl.ContentTemplate>        <DataTemplate>            <view:DocumentView />        </DataTemplate>    </TabControl.ContentTemplate></TabControl>上面的XAML正确绑定到DocumentViewModel的ObservableCollection,从而通过DocumentView呈现每个成员。为了简化本示例,我从DocumentView中删除了TreeView(如上所述),并用包含3个固定选项卡的TabControl替换了它:<TabControl>    <TabItem Header="A" />    <TabItem Header="B" />    <TabItem Header="C" /></TabControl>在这种情况下,DocumentView和DocumentViewModel之间没有绑定。运行代码时,内部的TabControl不能记住切换外部的TabControl时的选择。但是,如果我显式绑定内部TabControl的SelectedIndex属性...<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">    <TabItem Header="A" />    <TabItem Header="B" />    <TabItem Header="C" /></TabControl>...到DocumentViewModel上的相应虚拟属性...public int SelecteDocumentIndex { get; set; }...内部选项卡能够记住其选择。我知道我可以通过将此技术应用于每个控件的每个可视属性来有效地解决我的问题,但是我希望有一个更优雅的解决方案。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 622 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信