好的,这将是一个1000英尺长的问题,但有很多要涵盖,所以这里:
我正在创建分页项控件,其目的是以分页格式显示非常大的集合。我在 GitHub 上创建了一个存储库,可以找到here。为简单起见,我删除了任何样式。
启动应用程序后,它看起来像这样:
这非常简单,有导航按钮,每页项目选择器,但这并不重要。此处的问题是您点击按钮“打开新窗口”。
这将打开一个新的MainWindow
,但在第一个窗口中,集合消失,如下所示:
上图显示了前面的旧窗口,如您所见,新窗口中没有内容列表。
因此,在将我的头撞在墙上几个小时之后,我需要帮助。我将概述项目的结构。
AnagramPagedItemsControl
用于显示内容的控件是一个名为AnagramPagedItemsControl
的自定义控件,它负责处理页面之间的导航。我认为这里的关键属性是PagedCollection
。
PagedCollection
依赖项属性包含绑定到Models
中TestItemsViewModel
属性的集合。
TestItemsViewModel
这是DataContext
的{{1}},每个窗口实例都应该创建自己的视图模型。 MainWindow
方法负责创建测试项列表。
LazyPagedCollection
此集合的目的是封装分页可观察集合的逻辑,它只在需要时加载页面,因此是懒惰。
当用户点击各种导航按钮时,会公开CreateTestItems()
中调用的NextPage
等方法。视图模型还可以调用AnagramPagedItemsControl
上的导航,这允许视图模型调用导航而无需通过视图来执行导航。
TL; DR
当我创建新的LazyPagedCollection
时,上一个窗口的内容会消失。问题几乎可以肯定是控制,但是我对如何解决这个问题感到困惑。
这是一个非常大的问题,所以我非常感谢任何能够研究它的人。同样,源代码是here,请随时提出替代方案或挑选出我可能忽略的任何内容。
答案 0 :(得分:2)
有一些时间,所以:
问题是CollectionView
中AnagramPagedItemsControl
样式中generic.xaml
属性的设置器。
每次应用样式时,不实例化新的ListBox
;它将只创建一个ListBox
,第一次创建样式,使用该值,重复使用。实际上,MainWindow
的每个实例都共享相同的ListBox
。
您可以通过在Tag
中将PART _ CollectionView
的{{1}}属性设置为(例如)“1”来查看此内容。当您打开一个新窗口时,您会看到SetupBindings(ItemsControl PART_CollectionView)
包含您之前分配的相同值。