Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个自定义控件会影响控件可见性_C#_Wpf_Xaml_Custom Controls - Fatal编程技术网

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

C# 多个自定义控件会影响控件可见性,c#,wpf,xaml,custom-controls,C#,Wpf,Xaml,Custom Controls,好的,这将是一个1000英尺长的问题,但有很多内容需要涵盖,所以这里是: 我正在创建一个分页项目控件,其目的是以分页格式显示非常大的集合。我已经在GitHub上创建了一个可以找到的存储库。为了简单起见,我删除了任何样式 启动应用程序时,它看起来如下所示: 这非常简单,有导航按钮,每页有一个项目选择器,但这并不重要。单击按钮“打开新窗口”时出现问题 这将打开一个新的主窗口,但在第一个窗口中,集合将消失,如下所示: 上图显示了前面的旧窗口,如您所见,新窗口中没有内容列表 所以,在我的头撞在墙上

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

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

启动应用程序时,它看起来如下所示:

这非常简单,有导航按钮,每页有一个项目选择器,但这并不重要。单击按钮“打开新窗口”时出现问题

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

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


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

anagrampagedItemControl

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

PagedCollection
依赖项属性保存绑定到
TestItemsViewModel
中的
Models
属性的集合

测试项目视图模型

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

LazyPagedCollection

此集合的目的是封装分页可观察集合的逻辑,它仅在需要时加载页面,因此具有惰性

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


TL;DR

创建新的
窗口时,上一个窗口的内容将消失。问题几乎可以肯定是与控制,但我被困在如何解决问题



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

有时间,因此:

问题在于
generic.xaml
anagrampagedItemControl
样式中的
CollectionView
属性的setter

这不会在每次应用样式时实例化新的
列表框
;它只会在第一次创建样式时创建一个
列表框
,并反复使用该值。因此实际上,
MainWindow
的每个实例都共享相同的
ListBox


您可以通过在
设置绑定(ItemsControl PART\u CollectionView)
中将PART\ucode>CollectionView的
标记设置为(例如)“1”来查看这一点。当您打开一个新窗口时,您将看到
PART\u CollectionView.Tag
包含与先前指定的值相同的值

这也让我困惑了一段时间。我不喜欢被迷惑:)