2010-05-03 77 views
3

我是SilverLight和Mvvm-Light的新手。我在我的視圖上有一個DataForm,用於顯示/編輯我的視圖模型的SelectedPerson屬性(一個Person對象)。如何判斷使用EventToCommand時哪個數據形式按鈕結束編輯

我想在我的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。有沒有辦法知道當按下「取消」按鈕時按下了哪個按鈕或抑制了呼叫?

感謝您提供的任何幫助!

回答

3

您正在查找的信息在EditAction中隱藏得很深入DataFormEditEndedEventArgs。 DataFormEditAction類型的此屬性可以是Commit或Cancel。

有一種方法可以將參數傳遞給Command:將屬性PassEventArgsToCommand(在EventToCommand對象上)設置爲True。在ViewModel上,使用一個RelayCommand。將事件參數的委託的參數,那麼你可以這樣做

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

希望它能幫助,

洛朗

+0

好的,但是,如果您不將DataForms CurrentItem作爲CommandParameter傳遞,那麼您如何才能對數據執行操作? – Stimul8d 2011-08-27 11:12:17

0

如果你想採取行動,你也可以做一個綁定的數據到CurrentItem並通過你的命令(或其他地方)使用它,這樣你就可以做任何你想要的物品。

相關問題