我有一個動態加載xaml的子窗口,現在我想做一些綁定以便在子窗口和父窗口之間傳遞消息。因爲這個項目是基於插件的,所以對於只負責加載插件並幫助他們進行通信的shell來說,確定xaml中的控件是不可能的,因此在後面的代碼中操作它們是不明智的。Silverlight:動態加載和綁定Xaml
我已經實現了一個AppDataStore類來激發整個應用程序的消息傳遞。
AppDataStore.Values["SomeKey"] = "SomeObject";
就這樣我不知道是否有可能綁定動態加載到視圖模型,因此在二傳手,我可以使用AppDataStore的消息控件。此外,如果我能以這種方式實施一些驗證,那將是完美的。
你可能想知道爲什麼我試圖在我甚至不知道控件是什麼的情況下綁定控件。爲了回答這個問題,我認爲如果我指定要在控件的「Tag」屬性中綁定的屬性,則可以遍歷可視化樹並使用Reflection獲取屬性值。
無論如何,以上只是我的一些想法,直到現在,我一直堅持在這一點上很長時間。如果您知道如何實施它,或者您有更好的解決方案,請告訴我。提前致謝!
謝謝您的回答。其實我在我的項目中使用MEF和CM。所以消息傳遞並不是一個很大的問題。問題在於,很難在代碼中調用消息傳遞,因爲xaml(動態控件)是易失性的 - 儘管它是我指定的,我不希望代碼依賴於因爲整個實現構建在MVVM上。 – 2013-05-07 14:04:16
那麼爲什麼要使用代碼隱藏 - 爲什麼不只是從視圖模型調用消息?你有沒有麻煩佈線從視圖 - > viewmodel的控制? – Charleh 2013-05-07 14:08:29
是的。因爲動態加載的xaml控件可能是一個TextBox或一個CheckBox或什麼的,所以將這個值綁定到ViewModel並不容易。我希望我可以將它們全部綁定到字典,但不知道它是否可行。 – 2013-05-07 14:39:10