0

私は MVVM を使用して WPF アプリケーションを作成していますが、View から ViewModel への EventArgs のカスタム ルーティングを処理するために何を使用すればよいかについて混乱しています。

VM に CurrentIndex というプロパティがあります。私のビューでは、これはコントロールにバインドされています。

Value="{Binding CurrentIndex}"

このコントロールは、コントロールの値が変更されたときに独自の EventArgs のセットを持ちます (つまり、IndexValueChangedEventArgs)。

このイベントをトリガーし、ViewModel の現在の状態にアクセスして、それに応じて ViewModel を更新する方法を理解しようとしています。

EventTrigger (コマンドを呼び出しますが、VM にバインドされているため、コントロールからカスタム イベント引数を取得できません) を使用してこれを実行しようとしましたが、カスタム EventArgs にアクセスできるが、私のVM。

パターン内で何が間違っているのかわかりません。私がしたいのは、ControlA から EventArgs を取得して、VM と対話し、それに応じて更新できるものにすることだけです。

ありがとう。

4

1 に答える 1

0

基本的に、View から ViewModel に EventArgs をルーティングせず、バインディングを使用します。

ViewModel は INotifyPropertyChanged を実装する必要があります。さまざまなボイラープレートの実装がありますが、自分で行うのは難しくありません。

public class MyViewModel : INotifyPropertyChanged
{
    #region Implementation of INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    private void RaisePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if(handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private int _currentIndex;
    public int CurrentIndex
    {
        get { return _currentIndex; }
        set
        {
            if (value != _currentIndex)
            {
                _currentIndex = value;
                RaisePropertyChanged("CurrentIndex");
            }
        }
    }
}

これで、既に持っているバインディングを使用して、ビューがビューモデルへの変更と同期されます

Value="{Binding CurrentIndex}"

もちろん、ビューの DataContext がビューモデルのインスタンスに設定されていると仮定します。

于 2012-04-06T15:14:11.793 に答える