gpt4 book ai didi

wpf - 如何保留 TabControl 中选项卡项内的控件状态

转载 作者:行者123 更新时间:2023-12-03 07:35:26 27 4
gpt4 key购买 nike

我是 WPF 的新手,尝试构建一个遵循 Josh Smith 描述 The Model-View-ViewModel Design Pattern 的优秀文章的建议的项目。 .

使用 Josh 的示例代码作为基础,我创建了一个简单的应用程序,其中包含许多“工作区”,每个工作区由 TabControl 中的一个选项卡表示。在我的应用程序中,工作区是一个文档编辑器,允许通过 TreeView 控件操作分层文档。

尽管我已成功打开多个工作区并在绑定(bind)的 TreeView 控件中查看其文档内容,但我发现 TreeView 在选项卡之间切换时“忘记”了其状态。例如,如果 Tab1 中的 TreeView 部分展开,则切换到 Tab2 并返回 Tab1 后,它将显示为完全折叠。此行为似乎适用于所有控件的控件状态的所有方面。

经过一些实验,我意识到可以通过将每个控件状态属性显式绑定(bind)到底层 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 正确绑定(bind)到 DocumentViewModel 的 ObservableCollection,其中每个成员都通过 DocumentView 呈现。

为了简单起见,我从 DocumentView 中删除了 TreeView(上面提到的),并将其替换为包含 3 个固定选项卡的 TabControl:

<TabControl>
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>

在此场景中,DocumentView 和 DocumentViewModel 之间没有绑定(bind)。当代码运行时,当外部TabControl切换时,内部TabControl无法记住其选择。

但是,如果我显式绑定(bind)内部 TabControl 的 SelectedIndex 属性...

<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">
<TabItem Header="A" />
<TabItem Header="B" />
<TabItem Header="C" />
</TabControl>

...到 DocumentViewModel 上相应的虚拟属性...

public int SelecteDocumentIndex { get; set; }

...内部选项卡能够记住其选择。

我知道通过将这种技术应用于每个控件的每个视觉属性,我可以有效地解决我的问题,但我希望有一个更优雅的解决方案。

最佳答案

我用这个技巧WPF TabControl:关闭选项卡虚拟化解决了这个问题,地址:http://www.codeproject.com/Articles/460989/WPF-TabControl-Turning-Off-Tab-Virtualization这是具有 IsCached 属性的 TabContent 类。

关于wpf - 如何保留 TabControl 中选项卡项内的控件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080764/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com