首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF TabControl与Pages

WPF TabControl与Pages
EN

Stack Overflow用户
提问于 2012-04-04 03:33:25
回答 2查看 5.2K关注 0票数 2

我正在创建一个资源密集型仪表板应用程序,它将具有许多数据可视化领域。我认为最好使用一个框架,并使用WPF页面一次加载一个所需的页面。这些页面也会有不同的数据上下文,安全限制等。但是,另一位开发人员说,我可以使用TabControl来完成相同的事情。

在应用程序启动时,TabControl是否一次加载所有选项卡中的所有项?或者,我是否可以像WPF页面那样根据需要延迟加载它们(页面只在导航到时加载内容)?另外,您可以在TabControl中为每个项目提供不同的数据上下文吗?

EN

回答 2

Stack Overflow用户

发布于 2012-04-04 03:51:10

在WPF中,您可以使用UI虚拟化,这意味着只初始化和呈现可见的控件。据我所知,TabControl默认情况下不支持UI虚拟化,但也许您可以手动添加它或使用其他控件。也许你想看看下面的article,它提供了一些性能提示。还提到了UI和数据虚拟化之间的区别。不显示控件并不意味着基础数据不在内存中。将加载所有绑定目标,但不会呈现控件。

关于你的第二个问题:是的,每个TabItem都可以有自己的DataContext。如果使用TabControls ItemsSource绑定项目列表,则每个TabItemDataContext都将是列表中的一个项目。如果您手动添加TabItems,您可以这样设置DataContext

代码语言:javascript
运行
复制
<TabControl>
    <TabItem DataContext="{Binding Context1}" />
    <TabItem DataContext="{Binding Context2}" />
</TabControl>
票数 2
EN

Stack Overflow用户

发布于 2012-04-04 04:37:34

它比你想象的要复杂得多。如果您绑定到Tab Collection (想MVVM),那么选项卡只有在被选中时才会被创建。而对于一个Collection,如果你留下一个标签,然后回来,它会被再次构建。如果在XAML中创建选项卡,则在加载窗口时将构建所有选项卡。是的,您可以为每个选项卡使用不同的DataContext。我对惰性加载所做的是绑定到TabItem属性IsSelected,如果它为false,则类中的所有属性只返回一个(快速)符合静态类型的值。如果将IsSelected更改为true,则加载实际值并调用NotifyPropertyChanged (并保存实际值)。

我使用了它,我加载了一个很大的对象,其中一个标签是摘要。标签页不会虚拟化,但是如果你有很大的列表,那么一定要在标签页中使用虚拟化。您可以使用BackgroundWorker创建属性,但是一旦它返回并绑定了返回值,UI就会锁定,直到呈现UI控件为止。对我来说,重用单个框架而不是选项卡是一个UI问题。为了拆分代码,我通常加载一个带有框架和页面的选项卡(并且我通常将数据传递到ctor中的页面以加载动态内容)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10000092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档