c# - 在 Windows 8 应用程序中使用 MessageBinder.SpecialValues 不起作用?

标签 c# mvvm windows-8 caliburn.micro

我是 Caliburn.Micro 的新手,所以我希望有人能够在这里帮助我:)。

我尝试在 Windows 8 应用程序中使用 MessageBinder.SpecialValues,但无法让它工作。我添加了一个新的“$pointerPercentage”来了解鼠标在元素内的位置百分比(对于我的合成器应用程序中的音乐键盘)(在 0.0 和 1.0 之间 float )。目前其他一切都在工作(所以我相信我已经正确连接了 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)。

我做错了什么?任何帮助将不胜感激:)。

最佳答案

我发现了您的问题:问题出在这一行的 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 网站上发布了这个,我已经在那里回答了 - 在我看来,这应该在字典中的键和操作消息参数中的键上完成,以防止出现这种情况正在发生。 (可以在调用 SpecialValues.Add 方法时完成,以最大程度地减少代码影响) - 但这是 CM 开发人员需要考虑的事情

关于c# - 在 Windows 8 应用程序中使用 MessageBinder.SpecialValues 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13732657/

相关文章:

xaml - 银光 : Not naming controls in XAML when using MVVM (Silverlight)?

windows-8 - Windows 8 应用程序的嵌入式数据库

c# - 做有条件的 Where 过滤器使用延迟执行?

c# - 在 snmptrap.exe 运行时捕获 SNMP 陷阱

c# - 如何使用触发器将事件参数传递给命令?

.net - 使 WPF 应用程序看起来像 Metro 风格,即使在 Windows 7 中也是如此? (窗口 Chrome/主题/主题)

c# - Windows 8 应用程序的 ViewModel 中的依赖属性与 INotifyPropertyChanged

c# - BeginRequest 被调用两次

c# - 如何在项目 C# 中访问 bin 文件夹内的自定义文件夹

wpf - 数据网格验证以防止重复输入