我已經從舊版本MVVM光(變更集3bdbffb4e70a「BL0014雜項」)進行升級時,同樣的事情發生在我身上。即時發送()停止工作。
要解決該問題,請嘗試使用使用receiveDerivedMessagesToo設置爲true的.Register()重載。
當Send()爲其創建一些類型的DynamicProxy的對象時,可能會發生此問題。例如,當您在數據上下文的任何集合下使用Local屬性時,EntityFramework將執行此操作。
例如的EntityFramework的DbContext爲ctx.Dealers.Local會產生類型的項目,看起來像列表:
當匹配註冊的偵聽器Messenger.SendToTargetOrType() System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E因爲將失敗註冊類型只是一個「經銷商」,而不是代理商。
爲什麼這用於在不要求receiveDerivedMessagesToo設置爲true的情況下工作而現在不用?
此前MVVM光「Messenger.cs」 Messenger.SendToTargetOrType()有這樣的代碼:
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)
{
var messageType = typeof(TMessage);
這個工作偉大的,因爲傳遞的數據的實際類型並不重要,臨時用戶的剛型類型。
現在代碼已被更改爲:
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)
{
Type messageType = message.GetType();
現在正在使用的參數的類型來代替。這是一個問題,因爲如果你的「消息」是某種類型的代理,那麼Registed偵聽器的搜索將失敗。
您能否請您在laurent(at)galasoft(dot)ch上給我一個repro ch,我想調查。謝謝! – LBugnion
我使用Silverlight 5安裝程序中的最新MVVM light 3,並且消息仍然有效,因此它必須來自您的設置。 – jv42
我看到的唯一出現在'RaisePropertyChanged()'中,但是在@ LBugnion的博客中記錄了這一點。 – jv42