Silverlight 保持 ListBox 滚动位置

标签 silverlight mvvm mvvm-light light

我有一个 ListBox 控件,我使用 ObservableCollection 在我的 ViewModel 中添加项目,但是我注意到 ListBox 并没有像我预期的那样保持滚动位置。

我是 Silverlight 的新手,并选择使用 MVVM,但我不知道该怎么做。场景如下:

  • 获取 ListBox 滚动位置(需要访问 xaml 控件,但在 ViewModel 内部?)
  • 将项目添加到 ObservableCollection(完成,只需通过 ViewModel 中的 Dispatcher.CheckBeginInvokeOnUI,ListBox 控件的 ItemSource 绑定(bind)到它)。
  • 设置 ListBox 滚动位置(再次需要从 ViewModel 中访问 xaml 控件?)

  • 我在这里找到了这个答案:
    Restoring exact scroll position of a listbox in Windows Phone 7

    通过一些修改,我认为可以通过以下方式获取和设置垂直滚动位置:
    ScrollViewer sv = TimelineTweets.Descendents().OfType<ScrollViewer>().FirstOrDefault();
    double startOffset = sv.VerticalOffset;
    sv.ScrollToVerticalOffset(startOffset);
    

    但是一般来说,我什至如何使用 MVVM 和 Silverlight 来解决这个问题,非常困惑。

    最佳答案

    我建议滚动位置是 UI 的东西,所以在后面的 UI 代码中处理它。
    这不会破坏 MVVM,因为您仍然在 ViewModel 中处理所有这些。

    关于Silverlight 保持 ListBox 滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315502/

    相关文章:

    wpf - 为什么我的 ImageSource 绑定(bind)没有更新?

    wpf - 数据绑定(bind)到 WrapPanel 不能按预期工作

    c# - 带有用于搜索的文本框的 DataTemplate

    mvvm - 数据源、存储库、 View 模型和 IoC 容器。真的需要存储库吗?

    windows - namespace 中不存在名称 "ViewModelLocator"(通用应用程序)

    silverlight - 是否可以在 Mac 上使用 Silverlight 进行开发?

    c# - 在 Silverlight 中检测 CapsLock 是打开还是关闭

    css - 使 Silverlight 应用程序在不同的浏览器缩放级别下工作

    c# - 交互服务与交互请求对象

    c# - 来自 lambda 的带有构造函数参数的 RelayCommand