昨天在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
更改为MvxRelayCommand
或ICommand
,则绑定有效。
此处的继承树是MvxRelayCommand
继承自IMvxCommand
的{{1}}继承 - 但我确实怀疑WinRT可能在后台使用System.Windows.Input.ICommand
进行一些时髦的类型重定向。
是否有人了解是否可以在WinRT自定义控件中使用ICommand
或IMvxCommand
依赖项属性?
更新 - 示例项目是:https://github.com/slodge/WinRTInterfaceBindingProblem
答案 0 :(得分:2)
我认为System.Windows.Input.ICommand
可用于WinRT控件。在您的示例中,您可能只需要将依赖项属性声明为ICommand
而不是IMvxCommand
。
答案 1 :(得分:0)
ICommand
中的位于System.Windows.Input
命名空间中。在Metra XAML中,它位于Windows.UI.Xaml.Input
命名空间中。看来你正在引用一个依赖于WP7二进制文件的库,它不会编译。
答案 2 :(得分:0)
最后,我没有从MS那里得到任何回报。
但是从样本中我猜测它只是一个我们不得不忍受的错误:
https://github.com/slodge/WinRTInterfaceBindingProblem/tree/master/App1