0

イベントをトラップするために動作が添付された Prisms Commands を使用する SL3 のデータ フォームがあります。

(このブログ投稿にかなり厳密に従っています: http://blogs.southworks.net/dschenkelman/2009/04/18/commands-with-attached-behavior-for-silverlight-3-dataform/#comment-607 )

基本的に、それはすべて接続され、正常に動作していますが、ビューモデルでは、イベントのイベント引数にアクセスする方法がわかりません。

VM のコンストラクターで、delegate コマンドを定義します。

this.EditEnded = new DelegateCommand<object>(o => {
    //how can I tell if the button clicked was cancel or save?
}

しかし、何をする必要があるかを定義できるように、DataFormItemEditEndedEventArgs プロパティにアクセスする必要がありますか? ユーザーがキャンセルまたはコミットしたかどうかに応じて、さまざまなアクションを実行したいと考えています。

4

2 に答える 2

2

パラメータを元に戻すには、CommandBehaviorBase 派生クラスを次のように編集します。

private void ItemEditEnded(object sender, DataFormItemEditEndedEventArgs e)
{
     this.CommandParameter = e.EditAction;
     ExecuteCommand();
}

これにより、EditAction (または必要なもの) が CommandDelegate に送信されます。この場合、パラメーターの添付プロパティを追加しません。添付プロパティ クラスを適切に編集します (CommandParameter を省略します)。私はこのアプローチが好きではありません(ちょっと非標準のようです)。他の誰かが別の提案を持っているのではないかと思います。

つまり、いつでもさまざまな種類のイベント (コミット用など) のイベントを追加できます。これはもう少し純粋ですが、多くの余分なコードを意味します。この場合は問題なく実行できますが、他のイベントの場合は不可能になります (マウス座標の伝達やばかげた何か)。

Prism Commands に関する私のビデオ。より多くの静的パラメーターを扱います。静的添付プロパティに基づいてメソッドを整理する方法については、「コマンド パラメーター」セクションを参照してください。

<Button Content="Save"
        HorizontalAlignment="Center"
        VerticalAlignment="Bottom"
        cal:Click.Command="{Binding GetCompanyData}"
        cal:Click.CommandParameter="SaveButton"
        />
于 2009-06-26T15:03:44.770 に答える
0

個別のボタンとアクションに対して個別のコマンド (SaveCommand と CancelCommand) を宣言する必要があるかもしれません。

于 2009-06-27T16:25:09.990 に答える