2014-01-14 162 views
0

我目前有一個windows phone 8應用程序,它具有綁定到某個視圖模型的用戶控件。在視圖模型中,我有一個綁定到視圖上的按鈕的命令屬性。點擊按鈕取消命令

我想在視圖中彈出一個消息框,詢問「您確定要執行X嗎?」。如果是,它需要激發綁定到該按鈕的命令,否則它不需要激發該命令。

我明顯不想從視圖模型中觸發MessageBox,因爲這是視圖邏輯。那麼如何在視圖中顯示MessageBox,然後不觸發綁定到它的命令。

編輯:讓我說清楚。該命令位於視圖模型中並綁定在xaml中。 MessageBox顯示位於後面的視圖代碼中(在按鈕的單擊事件中)。我想保持這樣。我的問題只是。一旦按下按鈕並且MessageBox返回Cancel,如何不觸發命令。

+2

您可以顯示在模型中的MessageBox。並且可以通過事件將消息框的結果返回給視圖模型。 – Tomtom

+0

抱歉,我不知道這個問題。請忽略我的回答(我將刪除它)。 – Gabriel

+0

爲什麼你想在代碼隱藏中顯示消息框?如果您使用MVVM,那麼codebegind文件中應該沒有任何內容。您應該將消息框的調用移動到模型中,如果用戶選擇「取消」,您可以將您的命令設置爲空,在第一次點擊時。 – Tomtom

回答

0

好,所以我找到了解決方案。

我創建了一個新的UserControl:ConfirmationButton,它具有依賴項ICommand屬性,用於確認是否通過。在控件中,如果MessagBox返回Yes,則手動觸發該命令。然後我使用這個新的UserControl,我需要這樣的功能。

0

你可以在按鈕的點擊事件上做到這一點。您可以在單擊事件處理程序中彈出消息框。如果用戶想要取消操作而不是簡單地設置e.handle = true。

如果您不想使用代碼隱藏,您可以創建自己的自定義按鈕,您可以在其中覆蓋該按鈕的OnClick()方法。在方法中顯示消息框,如果用戶想要取消該事件,則不要調用base.OnClick();

您可以參考以下鏈接,作者解釋說,如何可以實現撤銷命令:

http://www.codeproject.com/Articles/274982/Commands-in-MVVM#hdiw1

+0

RoutedEventArgs上沒有e.handle,它是普通按鈕的事件參數。 – Murdock

+0

@Murdock:嘿,這只是一個錯字,你可以輕鬆解決。在Button.Click事件處理程序中,您會發現可以設置爲true的e.Handled以進一步停止傳播事件。 –