WinRT自定义控件 - 无法绑定类型为IMvxCommand的DependencyProperty,但可以在类型更改为RelayCommand或ICommand时绑定

时间:2012-06-18 17:13:28

标签: windows-runtime icommand

昨天在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();
}

无论我尝试什么,我都无法将其绑定 - 输出窗口调试绑定错误始终报告绑定无法将类型MvxRelayCommand转换为IMvxCommand

但是,如果我将IMvxCommand更改为MvxRelayCommandICommand,则绑定有效。

此处的继承树是MvxRelayCommand继承自IMvxCommand的{​​{1}}继承 - 但我确实怀疑WinRT可能在后台使用System.Windows.Input.ICommand进行一些时髦的类型重定向。

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


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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

WP7 ICommand中的

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

答案 2 :(得分:0)

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

但是从样本中我猜测它只是一个我们不得不忍受的错误:

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