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

时间:2015-11-20 09:46:46

标签: c# wpf xaml custom-controls

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

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

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

The main window

这非常简单,有导航按钮,每页项目选择器,但这并不重要。此处的问题是您点击按钮“打开新窗口”

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

Disappearing content

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

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

AnagramPagedItemsControl

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

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

TestItemsViewModel

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

LazyPagedCollection

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

当用户点击各种导航按钮时,会公开CreateTestItems()中调用的NextPage等方法。视图模型还可以调用AnagramPagedItemsControl上的导航,这允许视图模型调用导航而无需通过视图来执行导航。

TL; DR

当我创建新的LazyPagedCollection时,上一个窗口的内容会消失。问题几乎可以肯定是控制,但是我对如何解决这个问题感到困惑。

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

1 个答案:

答案 0 :(得分:2)

有一些时间,所以:

问题是CollectionViewAnagramPagedItemsControl样式中generic.xaml属性的设置器。

每次应用样式时,实例化新的ListBox;它将只创建一个ListBox,第一次创建样式,使用该值,重复使用。实际上,MainWindow的每个实例都共享相同的ListBox

您可以通过在Tag中将PART _ CollectionView的{​​{1}}属性设置为(例如)“1”来查看此内容。当您打开一个新窗口时,您会看到SetupBindings(ItemsControl PART_CollectionView)包含您之前分配的相同值。