Silverlight维护ListBox滚动位置

时间:2011-03-15 17:23:16

标签: silverlight mvvm mvvm-light light

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

我是Silverlight的新手,并选择使用MVVM,但我无法理解这一点。方案如下:

  • 获取ListBox滚动位置(需要访问xaml控件,但是在ViewModel中?)
  • 将项目添加到ObservableCollection(完成,只需通过ViewModel中的Dispatcher.CheckBeginInvokeOnUI,ListBox控件的ItemSource绑定到它)。
  • 设置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中解决这个问题,非常困惑。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用

存储它
(DataContext as VM).ScrollVOffset=sv.VerticalOffset 

在您的视图中。其中VM是ViewModel类,Scroll Offset是ViewModel类的属性。