【问题标题】:Does ListBox keep the CollectionViewSource per ItemsSource?ListBox 是否保留每个 ItemsSource 的 CollectionViewSource?
【发布时间】:2012-05-11 01:14:24
【问题描述】:

我正在编写一个控件来探索可以动态创建的树结构。 这个控件看起来很像一个资源管理器窗口,其中“CurrentItem”是打开的文件夹,一些“ChildrenItems”是子文件夹或文件。

为了显示 ChildrenItems,我使用了 ListBox。当我点击一个子项时,我将新的 CurrentItem 设置为子项,并更新 ChildrenItems(沿着树向下)。

所以从技术上讲,我经常修改 ListBox 的 ItemsSource 属性。

我还有一些标准命令,例如“Go Up”、“Go Back”、“Root”等

我对“Go Up”命令有一些问题,并注意到当我将列表框的 ItemsSource 属性更改为我之前设置的 ItemsSource 时,ListBox 的 SelectedItem 会重置为旧时选择的旧项目使用了 ItemsSource。

也许一个小例子会更明确:假设我有这个树结构:

 - Root
   - Node 1
     - SubNode 1a
     - SubNode 1b
   - Node 2
   - Node 3

我通过将“CurrentItem”设置为根来开始探索这个结构。这意味着我的 ListBox ItemsSource 设置为“Node1,Node2,Node3”。

然后我单击“Node1”(更改 SelectedItem)。然后我的控件将其“CurrentItem”设置为这个新的 SelectedItem,并将 ListBox ItemsSource 设置为“SubNode1a,SubNode1b”。

之后,如果我使用“Go Up”命令,“CurrentItem”被重置为“Root”,ListBox ItemsSource 被重置为“Node1,Node2,Node3”,但有一个区别:“Node1”被选中。

这让我想到了一个可重复使用的 CollectionViewSource,因此保留了选定的项目。这可能吗?

感谢您的见解。

【问题讨论】:

    标签: wpf listbox itemssource collectionviewsource


    【解决方案1】:

    我从 Bea Stollnitz 那里找到了一个有趣的 article,她说:

    CollectionViewSource 还启用了另一个有趣的场景。如果一个特定的 CollectionViewSource 在不同的时间指向不同的集合,它会记住它为包装这些集合而创建的所有视图。如果再次设置了过去已设置的源,CVS 会识别它并重用它最初创建的视图。这种行为在分层绑定场景中很有用。

    这可能就是我一直在寻找的答案。我的下一个问题是:是否可以禁用此行为?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 2011-08-17
      • 2013-06-10
      • 2015-10-31
      • 1970-01-01
      • 2011-07-21
      • 2011-07-13
      相关资源
      最近更新 更多