ObservableCollection を使用して ViewModel に項目を追加する ListBox コントロールがありますが、期待どおりに ListBox がスクロール位置を維持していないことに気付きました。
私は Silverlight を初めて使用し、MVVM を使用することを選択しましたが、それを行う方法がわかりません。シナリオは次のとおりです。
- ListBox のスクロール位置を取得します (xaml コントロールにアクセスする必要がありますが、ViewModel 内にありますか?)
- 項目を ObservableCollection に追加します (ViewModel の Dispatcher.CheckBeginInvokeOnUI を介して行うだけで、ListBox コントロールの ItemSource がそれにバインドされます)。
- ListBox のスクロール位置を設定します (ViewModel 内から xaml コントロールにアクセスする必要がありますか?)
ここでこの回答を見つけました: Windows Phone 7 でリストボックスの正確なスクロール位置を復元する
少し変更すると、垂直スクロール位置を取得して設定できると思います:
ScrollViewer sv = TimelineTweets.Descendents().OfType<ScrollViewer>().FirstOrDefault();
double startOffset = sv.VerticalOffset;
sv.ScrollToVerticalOffset(startOffset);
しかし、一般的にMVVMとSilverlightでこれを行うにはどうすればよいでしょうか。非常に混乱しています。