2010-10-28 78 views
0

不知道我正確地設計了這個(guidence是讚賞!),但我有一個搜索視圖,這是從許多地方調用。搜索屏幕有它自己的ViewModel。當用戶從搜索屏幕上選擇了某些內容(搜索後:)後,我需要將選擇發送到要求搜索的任何視圖(搜索屏幕是彈出窗口)。Silverlight命令動態綁定一個按鈕? MVVM

我有一個視圖定位器,當我發送消息時彈出屏幕屏幕。該消息從ViewModel(MVVM Light)發送到視圖定位器。

是否註冊回電?廣播消息?設置一個屬性?動態地將搜索屏幕上的「選擇」按鈕綁定回發起呼叫的視圖模型?

MMMM這麼多問題,這麼短的時間...

問候, 理查德

回答

1

我不確定MVVM Light是否具有與EventAggregator相同的任何內容,但這是我認爲可以爲您播放此事件的最佳方式。

另一種選擇是使用Reactive Extensions (Rx)並使接收方在打開搜索視圖之前使用過濾器訂閱事件,然後將過濾器傳遞到搜索視圖,以便使用該過濾器調用實際操作,所以即使搜索視圖模型請求搜索是另一個將接收事件的視圖模型。

+0

我很想看到一個例子或一些想法。我一直在努力應對ViewModel層中的視圖事件。我剛剛發現了反應性框架,我覺得這很有趣,但我現在只是略讀表面。 我將你的回答標記爲答案,因爲我覺得它是正確的設計。但是我可能無法實現它。 (PRISM可能是這裏的答案 - 但我聽說這是一個非常沉重的層。) – codeputer 2010-10-29 19:25:03

+0

我不是故意插入我自己的項目太多,但ReactiveXaml可以幫助您通過提供很多「膠水代碼」需要做這個東西 - 檢查它在http://bit.ly/cqQmtW – 2010-10-31 04:03:32

0

我建議您通過參考界面元素使得呼叫轉移到你的搜索。就我所知,所有這些都發生在視圖模型層。

另一種選擇是在搜索結果或搜索對象中設置一個標誌,該標誌記錄了哪個接口發起了呼叫。我不確定在這種情況下如何進行回調。

1

我有一個類似的問題,這裏是我如何做到這一點。

我對彈出式窗口有不同的ViewModel,視圖模型帶了一個你想要返回的對象的參數,例如,你有你的MainViewModel和一個屬性Customer。在PopupViewModel構造函數中,我從MainViewModel傳遞了Customer。當我進行搜索並找到您要查找的客戶時,將該客戶分配給來自MainViewModel的客戶參考。假設你已經實現了INotifyPropertyChange接口,只要你選擇了一個客戶,它就會顯示在你的主屏幕上。讓我知道你是否明白,否則我會給你發個例子。

希望這會有所幫助。

+0

感謝您的評論 - 這讓我花了更多的時間來思考我在做什麼,以及我怎麼可能實施它有點不同。 – codeputer 2010-10-29 19:29:08

+0

我很高興我向你提出了不同的想法:-)希望這一切都爲你解決。 – Jag 2010-11-01 16:49:45