3

私はSilverLightとMvvm-Lightを初めて使用します。ビューモデルのSelectedPersonプロパティ(Personオブジェクト)を表示/編集するDataFormがビューにあります。

ユーザーが[保存]ボタンをクリックしたときにビューモデルでコマンドを実行したいのですが、ユーザーが[キャンセル]をクリックした場合にアクションを実行したくありません。

ViewModelに以下を追加しました。

public RelayCommand PersonEditEnded {get; set;}
...
public void Initialize()
{
  PersonEditEnded = new RelayCommand(DoSomething);
  ...
}

public void DoSomething()
{
}

ビューに以下を追加しました。

<toolkit:DataForm x:Name="PersonForm" ... CurrentItem="{Binding SelectedPerson, Mode=TwoWay}">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="EditEnded">
      <gs:EventToCommand Command="{Binding PersonEditEnded, Mode=OneWay}"/>
    </i:EventTrigger>
  </i:Interaction.Triggers>
</toolkit:DataForm>

これは機能し、ユーザーが[送信]を押すとDoSomethingメソッドが呼び出されます。ただし、ユーザーが[キャンセル]を押すと、DoSomethingも呼び出されます。どのボタンが押されたかを知る方法や、キャンセルが押されたときに通話を抑制する方法はありますか?

あなたが提供できるどんな助けにも感謝します!

4

2 に答える 2

3

探している情報は、EditActionのDataFormEditEndedEventArgsに非常に深く隠されています。タイプDataFormEditActionのこのプロパティは、CommitまたはCancelのいずれかになります。

コマンドに引数を渡す方法があります。プロパティPassEventArgsToCommand(EventToCommandオブジェクト上)をTrueに設定します。ViewModelで、RelayCommandを使用します。デリゲートのパラメータはイベント引数になり、次のようなことができます

e =>
{
    if (e.CommitAction == DataFormEditAction.Commit)
    {
        DoSomething();
    }
}

それが役に立てば幸い、

ローラン

于 2010-05-03T23:25:26.067 に答える
0

データを操作したい場合は、CurrentItemにバインドして、コマンド(または他の場所)で使用することもできます。これにより、アイテムに対してやりたいことが何でもできます。

于 2012-04-11T13:44:28.363 に答える