3

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でこれを行うにはどうすればよいでしょうか。非常に混乱しています。

4

2 に答える 2

1

スクロール位置はUI用のものであるため、UIコードビハインドで処理することをお勧めします。ViewModelですべてを処理するため、MVVMが壊れることはありません。

于 2011-03-15T17:33:56.493 に答える
0

を使用して保存できます

(DataContext as VM).ScrollVOffset=sv.VerticalOffset 

あなたのビューの中に。VM は ViewModel クラスで、ScrollVOffset は ViewModel クラスのプロパティです。

于 2011-03-15T17:33:58.580 に答える