我正在WPF/XAML中處理我的第一個項目,並且還有很多我沒弄清楚。用戶控件通過命令進行通信 - 如何?
我的問題很簡單 - 我需要一個窗口,在頂部有一堆字段,用戶將使用它輸入他的選擇標準,檢索按鈕和數據網格。當用戶點擊按鈕時,將運行查詢,並使用結果填充網格。
現在,實現這一點的簡單而明顯的錯誤方法是讓一個單獨的模塊包含一個窗口,並在其中包含所有內容 - 輸入字段,數據網格和工程。這種責任的磨損使得不可維護的混亂。
所以我所擁有的是一個窗口,它只負責佈局,它包含兩個用戶控件 - 一個包含輸入字段和檢索按鈕的條件控件,以及一個包含數據網格的數據顯示控件。
問題是如何讓兩個人互相交談。
年前,我會添加一個指向標準控件的函數指針。窗口將它設置爲指向顯示控件中的一個函數,並且當單擊該按鈕時,它將調用顯示控件,傳遞選擇標準。
最近,我會添加一個事件到標準控制。我會讓窗口在顯示控件中設置一個處理程序來監聽事件,並且當按鈕被點擊時,它會引發事件。
這兩種機制都可以在WPF中工作。但是這兩個都不是XAMLish。在我看來,WPF已經專門提供了ICommand接口來適應這些類型的連接問題,但我還沒有真正弄清楚它們是如何工作的。而且我看到的例子都不符合我的簡單情況。
任何人都可以給我一些關於如何適應ICommand這個問題的建議嗎?或者直接在網上給我一個體面的解釋?
謝謝!
是的,我使用的視圖模型。我沒有提到它,因爲這不是問題所在。我可以在顯示控件的視圖模型中定義一個方法,並公開執行它的命令。將它綁定到顯示控件視圖中的UI元素將很簡單。但那不是我的問題。我需要從UI控件觸發命令,該控件沒有 - 也不應該 - 訪問顯示控件的視圖模型。 – 2012-02-09 20:40:40
@Jeff:在這種情況下,只需使用一個事件聚合器,它允許分離的組件進行協作。棱鏡有一個,或者你可以從其他地方抓一個或寫你自己的。 – 2012-02-10 07:37:18
這似乎是嚴重矯枉過正的問題,因爲兩個控件在同一窗口中彼此交談時受到限制。 – 2012-02-10 14:14:03