3

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

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

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

我在这里找到了这个答案: Restoreing 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 来解决这个问题,非常困惑。

4

2 回答 2

1

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

于 2011-03-15T17:33:56.493 回答
0

你可以使用它来存储它

(DataContext as VM).ScrollVOffset=sv.VerticalOffset 

在你的视野内。其中 VM 是 ViewModel 类,而 ScrollVOffset 是 ViewModel 类的属性。

于 2011-03-15T17:33:58.580 回答