0

在昨天的 WP2W8 伦敦活动中,我尝试将现有的 WP7 自定义控件移植到 WinRT(5 月 31 日发布候选版本)

这个自定义控件有一个属性,声明如下:

public IMvxCommand Command
{
    get { return (IMvxCommand)GetValue(CommandProperty); }
    set { SetValue(CommandProperty, value); }
}

public static readonly DependencyProperty CommandProperty =
    DependencyProperty.Register("Command", typeof(IMvxCommand), typeof(IconWithTextMenuItem), new PropertyMetadata(null));

private void OnTap(object sender, CantRememberExactEventArgs e)
{
    if (Command == null)
        return;

    if (CommandParameter != null)
        Command.Execute(CommandParameter);
    else
        Command.Execute();
}

无论我尝试什么,我都无法绑定 - 输出窗口调试绑定错误总是报告绑定无法将类型转换MvxRelayCommandIMvxCommand

但是,如果我更改IMvxCommandMvxRelayCommandICommand然后绑定有效。

这里的继承树是MvxRelayCommandIMvxCommand继承自继承的System.Windows.Input.ICommand——但我确实怀疑 WinRT 可能会ICommand在后台进行一些时髦的类型重定向。

有没有人了解是否IMvxCommand可以ICommand在 WinRT 自定义控件中使用依赖属性?


更新 - 一个示例项目是:https ://github.com/slodge/WinRTInterfaceBindingProblem

4

3 回答 3

2

我认为System.Windows.Input.ICommand可以在WinRT控件中使用。在您的示例中,您可能只需将依赖项属性声明为 aICommand而不是IMvxCommand

于 2012-06-18T21:17:03.413 回答
0

在 WP7ICommand中是在System.Windows.Input命名空间中。在 Metra XAML 中,它位于Windows.UI.Xaml.Input命名空间中。看来您正在引用一个依赖于无法编译的 WP7 二进制文件的库。

于 2012-06-20T08:32:34.167 回答
0

最后,我没有从 MS 那里得到任何回报。

但从样本来看,我猜它只是一个我们必须忍受的错误:

https://github.com/slodge/WinRTInterfaceBindingProblem/tree/master/App1

于 2012-09-03T20:25:54.987 回答