【问题标题】:How do I BringToView the latest item added to a bound ObservableCollection如何 BringToView 将最新项目添加到绑定的 ObservableCollection
【发布时间】:2008-11-27 15:29:33
【问题描述】:

我有一个 silverlight 控件(视图),它显示数据上下文(视图模型)的指定属性中的项目列表。

我需要的是让我的控件中的滚动查看器滚动到顶部或底部,具体取决于最新项目添加到列表中的位置。 (它总是列表的开头或结尾,我不需要担心列表插入的中间。)

在 WPF 中,我只使用 DataContextChanged 事件开始监听视图模型,但在 Silverlight 中,该事件是内部的。

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    一个好的起点是Attached Behaviors on CodeProject

    一个有用的行为是监视 ListBox.ItemsSource 并在设置时附加到可观察集合。在集合更改事件上,使用 ListBox.ScrollIntoView 显示更改的项目。

    【讨论】:

      【解决方案2】:

      我不能使用 ObservableCollection 的 CollectionChangedEvent,因为我首先需要 DataContextChanged 事件来获取包含 Collection 的 DataContext。

      【讨论】:

        【解决方案3】:

        你不会在 ViewModel 中这样做吗?

        无论 ViewModel 具有 ObservableCollection,都公开一个名为 SelectedItem 的 T 类型属性,并且每当 ObservableCollection 因新项目而更改时,CollectionChanged 事件将允许您设置 SelectedItem 属性。完成后,将控件中的 SelectedItem 连接到 ViewModel 上的此属性。

        这显然只适用于存在 SelectedItem 属性的 ListBox 等控件。

        【讨论】:

          【解决方案4】:

          您可以使用 ObservableCollection 的 CollectionChanged 事件代替 WPF 中的 DataContextChanged。在更改的集合中,您将了解 NewItem 索引。

          【讨论】:

          • 对 Silverlight 问题没有用处。
          猜你喜欢
          • 2017-07-30
          • 2018-03-18
          • 2010-11-27
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多