【问题标题】:Multiple custom controls affects control visibility多个自定义控件影响控件可见性
【发布时间】:2015-11-20 09:46:46
【问题描述】:

好的,这将是一个 1000 英尺长的问题,但要涵盖的内容很多,所以这里是:

我正在创建一个分页项控件,其目的是以分页格式显示非常大的集合。我在 GitHub 上创建了一个存储库,可以找到 here。为简单起见,我删除了所有样式。

在启动应用程序时,它看起来像这样:

这真的很简单,有导航按钮,每页项目选择器,但这并不重要。 问题是当您单击按钮“打开新窗口”时。

这将打开一个新的MainWindow,但在第一个窗口中,集合消失,如下所示:

上图显示了前面的窗口,如您所见,没有新窗口上的内容列表。


因此,在将我的头撞到墙上几个小时后,我需要帮助。我将概述项目的结构。

AnagramPagedItemsControl

用于显示内容的控件是一个名为AnagramPagedItemsControl的自定义控件,它负责处理页面之间的导航。我认为这里的关键属性是PagedCollection

PagedCollection 依赖属性包含绑定到TestItemsViewModel 中的Models 属性的集合。

TestItemsViewModel

这是MainWindow 中的DataContext,每个窗口实例都应该创建自己的视图模型。 CreateTestItems() 方法负责创建测试项列表。

LazyPagedCollection

这个集合的目的是封装分页的可观察集合的逻辑,它只在需要时加载页面,因此很懒。

当用户点击各种导航按钮时,它会公开NextPage 等方法,这些方法在AnagramPagedItemsControl 中调用。视图模型也可以在LazyPagedCollection 上调用导航,这允许视图模型调用导航而无需通过视图来进行。


TL;DR

当我创建一个新的Window 时,前一个窗口的内容消失了。问题几乎肯定出在控件上,但我不知道如何解决这个问题。


这是一个相当大的问题,所以我会非常感谢任何可以调查它的人。同样,源代码是here,请随时提出替代方案或挑出我可能忽略的任何内容。

【问题讨论】:

    标签: c# wpf xaml custom-controls


    【解决方案1】:

    有一些空闲时间,所以:

    问题在于generic.xamlAnagramPagedItemsControl 样式中CollectionView 属性的设置器。

    不会在每次应用样式时都实例化一个新的ListBox;它只会在第一次创建样式时创建ListBox,然后反复使用该值。所以实际上,MainWindow 的每个实例都共享相同的ListBox

    您可以通过将 PART_CollectionViewTag 属性设置为(例如)SetupBindings(ItemsControl PART_CollectionView) 中的“1”来查看这一点。当您打开一个新窗口时,您会看到 PART_CollectionView.Tag 包含您之前分配的相同值。

    【讨论】:

    • 这也让我困惑了一段时间。我不喜欢被困惑:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2012-07-25
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多