【问题标题】:Using MessageBinder.SpecialValues in Windows 8 app not working?在 Windows 8 应用程序中使用 MessageBinder.SpecialValues 不起作用?
【发布时间】:2012-11-23 20:02:39
【问题描述】:

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

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

我已将以下内容添加到我的 App.xaml.cs 的 Configure 方法中:

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)。

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

【问题讨论】:

  • 您是否尝试在Configure 中的匿名方法上设置断点?我自己没有用过SpecialValues,但是美元呢,我知道CM使用美元符号来表示一个特殊的值,但是在配置一个时它需要它吗?让我看看CM源码...

标签: c# mvvm windows-8 caliburn.micro


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多