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