多个自定义控件影响控件可见性

Multiple custom controls affects control visibility

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

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

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

这真的很简单,有导航按钮、每页项目 选择器,但这并不重要。这里的问题是当你点击按钮"Open New Window"的时候。

这将打开一个新的 MainWindow,但是在第一个 window 上,集合 消失了 ,如下所示:

上图是旧的 window在前面,可以看到,没有新的window上面的内容列表].


所以,在用头撞墙几个小时后,我需要帮助。我将概述该项目的结构。

AnagramPagedItemsControl

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

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

TestItemsViewModel

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

LazyPagedCollection

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

它公开了类似 NextPage 的方法,当用户单击各种导航按钮时,这些方法会在 AnagramPagedItemsControl 中调用。视图模型也可以在 LazyPagedCollection 上调用导航,这允许视图模型调用导航而无需通过视图来完成。


TL;DR

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


这是一个相当大的问题,所以如果有人能研究它,我将不胜感激。同样,源代码是 here,请随时提出替代方案或挑出我可能忽略的任何内容。

有一些空闲时间,所以:

问题是 generic.xamlAnagramPagedItemsControl 的样式中 CollectionView 属性 的 setter。

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

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