2012-02-21 43 views
0

我想定義五秒鐘運行一個故事板時,按下按鈕保護條款:你能有一個等待的故事板完成

  • 我可以把保護條款在故事板停止多次按下按鈕?

  • 如果不是,如果不必在ViewModel中顯式地引用動畫,那麼將會如何處理這個問題。

回答

1

如果您確實需要將按鈕鏈接到動畫,那麼我可能會創建一個TriggerAction(System.Windows.Interactivity.TriggerAction)並將其附加到按鈕。然後該動作將禁用按鈕,啓動動畫並在重新啓用按鈕之前監聽動畫的「已完成」事件。

恕我直言,MVVM不適合在這種情況下,因爲所有的交互都是視圖相關的,並沒有真正的好方法來通知你的ViewModel動畫是動畫。此外,實際的動畫時間不是確定性的,因此如果您假設固定的時間,可能會有其他影響。

您可能還想看看設置動畫的HandOffBehavior。根據您實際在做什麼動畫,如果用戶反覆敲擊按鈕,可能沒有真正的懲罰。如果有,則使用上述建議並禁用該按鈕。

+0

這就是我最終認爲自己,動畫是嚴格意義上的相關,因此沒有真正的需要添加一個屬性到ViewModel,正如我在上面的評論中說的,數據已經存在,動畫是嚴格介紹。 – deanvmc 2012-02-21 16:03:31

1

你可以做到以下幾點:

  • 當單擊該按鈕,啓動StoryboardButton.IsEnabled你設置爲false。這將防止後續點擊。
  • 處理Storyboard.Completed事件以重新啓用您的按鈕。

從MVVM的角度來看,按鈕的啓用狀態應該是您的視圖模型的屬性。您應該能夠將其作爲布爾屬性公開並將其綁定到Button.IsEnabled。當您啓動故事板(大概來自代碼隱藏)時,您可以通過對視圖模型的引用來設置啓用按鈕的狀態。

是的,...在代碼隱藏!這仍然足以讓您的視圖與您的視圖模型無關,並允許進行單元測試。

+0

這是一個好主意,我唯一擔心的是我不通常在視圖中引用ViewModel,並且不希望爲一個屬性執行此操作...如果必須,我會但我希望首先看到其他人的選擇。 – deanvmc 2012-02-21 11:50:00

+0

@deanvmc夠公平的。但是,值得記住的是,儘管視圖模型可能具有多個視圖,但視圖通常只呈現單個視圖模型類型。因此,在視圖代碼隱藏中引用具體的視圖模型類型很少會導致問題。 – ColinE 2012-02-21 11:51:48

+0

這是非常真實的,但我想知道,如果我需要訪問視圖上的ViewModel屬性,僅用於控制視圖(數據在那裏,故事板只是模擬它花費時間來填充),如果屬性屬於對ViewModel來說,如果我把視圖從頂部移開,那麼這個屬性將永遠不會被考慮。我不知道是否應該直接在後面的代碼中控制整個過程(storyboard + guard clause),因爲這是一個僅限視圖的限制來隱藏按鈕,目的是讓故事板運行其過程,思考? – deanvmc 2012-02-21 12:00:03