2010-01-19 18 views
5

我一直在尋找這對堆棧溢出的代碼,但無法找到一個答案,這又那麼我希望這個心不是一個重複...MVVM模式 - 如何觸發一個ICommand或CommandReference在後面

我有一個使用MVVM模式的應用程序,我喜歡將事情保持乾淨,但有時後面的一些代碼似乎比XAML解決方案更清潔。

我想知道是否有可能從代碼隱藏中觸發命令。

我已經建立了在我看來,一個命令已經參考(見下文)

<local:CommandReference 
       x:Key="CommandReferencePreviewReportsCommand" 
       Command="{Binding PreviewReportsCommand}" /> 

我想要做的是能觸發視圖的背後從C#代碼的命令引用或ICommand的。有誰知道如何做到這一點?

回答

5

您只需從代碼隱藏調用命令:

var parameter = null; // can also be any object you'd like to use as a parameter 
this.PreviewReportsCommand.Execute(parameter); 
+0

感謝馬克,但這似乎並沒有工作。我想從視圖的代碼隱藏中調用該命令,該代碼似乎無法「看到」此命令?如果我把它放在ViewModel下面,我會假設這段代碼工作正常......但我需要一些東西來訪問視圖後面。 – 2010-01-19 09:19:19

+0

謝謝馬克......我需要做一些微小的調整才能讓它工作......但是你讓我走上了正確的軌道。 – 2010-01-19 09:33:23

+0

我看到你得到它的工作 - 好:)這是不完全清楚,我從哪個代碼隱藏文件,你需要做到這一點。 – 2010-01-19 09:37:03

3

好了...馬克塞曼 - 你把我在正確的軌道上...所以我調升你的票...

我沒有意識到數據上下文可以是類型轉換,然後可以使ViewModel中的命令可見...所以下面的代碼適用於我的情況......並且通用解決方案也是類似的。

((ViewModel.PrintSelectViewModel) this.DataContext).PreviewReportsCommand.Execute(null);