2012-12-05 64 views
2

我是Caliburn.Micro的全新品牌,所以我希望有人能夠幫助我在這裏:)。在Windows 8應用程序中使用MessageBinder.SpecialValues不起作用?

我想在我的Windows 8應用程序中使用MessageBinder.SpecialValues,但我無法讓它工作。我添加了一個新的「$ pointerPercentage」來知道鼠標在元素中的位置(在我的合成器應用程序中的音樂鍵盤)的百分比(0.0到1.0之間的浮點數)。其他一切正在工作(所以我相信我有Caliburn.Micro正確連接)。

我已經添加下面我App.xaml.cs的配置方法:

protected override void Configure() 
{ 
    container = new WinRTContainer(); 
    container.RegisterWinRTServices(); 

    MessageBinder.SpecialValues.Add("$pointerPercentage", ctx => 
    { 
     return 1.0f; 
    }); 
} 

然後我使用它從一個Canvas元素內的PointerMoved事件:

<Canvas x:Name="keyCanvas" Background="#338B8BDC" 
    cal:Message.Attach="[Event PointerMoved] = [Action UpdateKeyboard($pointerPercentage)]" /> 

我ViewModel中的UpdateKeyboard方法確實被觸發(我用調試器闖入它),但傳入的參數始終爲0.0f(不是上面SpecialValues代碼中設置的1.0f)。

我在做什麼錯?任何幫助,將不勝感激 :)。

+0

您是否嘗試在「Configure」中的匿名方法上粘貼斷點?我自己並沒有使用'SpecialValues',但是美元怎麼樣,我知道CM使用美元符號來表示一個特殊的價值,但是在配置它時需要它嗎?讓我看看CM源... – Charleh

回答

4

,我發現您的問題:問題出在CM源在這條線:如果

else if (MessageBinder.SpecialValues.ContainsKey(parameterText.ToLower()) || char.IsNumber(parameterText[0])) 

不知道它被認爲與源問題 - CM將所有SpecialValues鍵原樣,但轉換任何指定的動作在與SpecialValues字典中的密鑰比較之前將消息特殊參數字符串轉換爲小寫字母

解決方法是將您的SpecialValues參數密鑰添加爲小寫!

protected override void Configure() 
{ 
    container = new WinRTContainer(); 
    container.RegisterWinRTServices(); 

    MessageBinder.SpecialValues.Add("$pointerpercentage", ctx => 
    { 
     return 1.0f; 
    }); 
} 

我見過你張貼了這個對CM的CodePlex網站了,我已經回答了那裏 - 在我看來,這應該在字典都鑰匙,和你的行動消息PARAMS鍵來完成以防止這種情況發生。 (這可以在調用SpecialValues.Add方法以儘量減少代碼影響時完成) - 但這是CM開發人員需要查看的東西

+0

太棒了!這絕對有效。謝謝 :)。 –

相關問題