1

MVVM パターン (MVVM Light を使用) を使用して、XAML アプリ (win8) をビルドしています。ViewModel のプロパティにバインドされている ListView があります。また、ViewModel の操作をトリガーするボタンもあり、その操作によってそのプロパティが更新されます (その結果、ListView が更新されます)。ボタンはコマンドを使用して、ViewModel で操作を実行します。ここまでは順調ですね。

問題は、リストが更新された後、ViewModel ではなく自分の View に厳密に属する操作を実行する必要があることです。リストを特定の項目までスクロールする必要があります。その操作をトリガーする方法は?特定の ListView イベントを使用する必要がありますか?

4

2 に答える 2

1

EventHandlerandメソッドを使用するとScrollIntoView(Object)、ViewMovel 内の View の参照を使用せずに、MVVM パターンを尊重せずに、目的を達成できます。

次のように ViewModel でイベントを作成します。

public event EventHandler ScrollListView;

ListViewビューで、プロパティが更新されたときにスクロールするコールバックを追加します。

ViewModel vm;
vm.ScrollListView += (sender, e) =>
{
     var specificItem = **some item**;
     MyListView.SelectedItem = specificItem; 
     MyListView.UpdateLayout();
     MyListView.ScrollIntoView(MyListView.SelectedItem);
};

次に、ViewModel でそのプロパティを更新し、スクロールしたい場合ListView:

if (this.ScrollListView != null)
{
    this.ScrollListView(this, EventArgs.Empty);
}

もちろん、これは私が通常、ケースごとにいくつかの微調整を行う方法です。

于 2013-05-08T17:50:17.430 に答える