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

Windows runtime WinRT自定义控件-无法绑定IMvxCommand类型的DependencyProperty,但在类型更改为RelayCommand或ICommand时可以绑定,windows-runtime,icommand,Windows Runtime,Icommand,在昨天的WP2W8伦敦活动中,我尝试将现有的WP7自定义控件移植到WinRT(5月31日发布的候选版本) 此自定义控件有一个声明如下的属性: public IMvxCommand命令 { 获取{return(IMvxCommand)GetValue(CommandProperty);} set{SetValue(CommandProperty,value);} } 公共静态只读DependencyProperty CommandProperty= Register(“命令”、typeof(IMv

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

此自定义控件有一个声明如下的属性:

public IMvxCommand命令
{
获取{return(IMvxCommand)GetValue(CommandProperty);}
set{SetValue(CommandProperty,value);}
}
公共静态只读DependencyProperty CommandProperty=
Register(“命令”、typeof(IMvxCommand)、typeof(IconWithTextMenuItem)、newpropertyMetadata(null));
私有void OnTap(对象发送方,CantMemberExactEventArgs e)
{
如果(命令==null)
返回;
if(CommandParameter!=null)
Command.Execute(CommandParameter);
其他的
Command.Execute();
}
无论我尝试了什么,我都无法将其绑定-输出窗口调试绑定错误总是报告绑定无法将类型
MvxRelayCommand
转换为
IMvxCommand

但是,如果我将
IMvxCommand
更改为
MvxRelayCommand
ICommand
,则绑定工作正常

这里的继承树是
MvxRelayCommand
inherits from
IMvxCommand
inherits from
System.Windows.Input.ICommand
——但我怀疑WinRT可能在后台使用
ICommand
执行一些古怪的类型重定向

有人知道WinRT自定义控件中是否可以使用
IMvxCommand
ICommand
依赖属性吗



更新-一个示例项目是:

我认为
System.Windows.Input.ICommand
可以在WinRT控件中使用。在您的示例中,您可能只需要将依赖项属性声明为
ICommand
,而不是WP7中的
IMvxCommand
ICommand
位于
System.Windows.Input
命名空间中。在Metra XAML中,它位于
Windows.UI.XAML.Input
命名空间中。看起来您引用的库依赖于无法编译的WP7二进制文件。

最后,我没有从MS那里得到任何关于此的信息

但从样本来看,我猜这只是一个我们不得不面对的bug:


谢谢-我同意-但实际上我想在扩展界面中使用一些东西-对这里发生的事情感到困惑:/I已经+1给出了答案-但也稍微更正了问题,包括ICommand信息和示例回购-抱歉,这让您的答案看起来很奇怪!谢谢你的回答。WinRT内部的ICommand的故事很奇怪-我无法详细评论它,因为我还不了解它。。。但是,关于“不会编译”——System.Windows.ICommand在WinRT上编译并运行良好——例如,see——您肯定错了,而且我被告知它已经作为MS提高代码可移植性的努力的一部分被特别包括在内。它可能会编译(我的错误),但Metro XAML按钮会希望绑定到Windows.UI.XAML.Input.ICommand,这意味着您的实现不会令人担忧——但可移植代码并非如此。请参阅上的系列文章,也请尝试运行github示例-ICommand可以编译和运行-它只是在运行时不绑定的中间接口。您的问题是为什么您的代码不工作。答案是它不兼容(并且不会参与任何可移植性——正确或错误)。我回答了你的问题,给了你技术上的原因,为什么它不起作用。正如我在第一次评论中所说,答案是正确的。。。“谢谢你的回答”。我同意你的观察,ICommand存在于两个地方。然而,我恐怕无法在这个阶段判断你的答案是否“正确”。。。不仅仅是因为1。示例--不引用任何WP7二进制文件;2.因为它确实可以编译;三,。因为如果我将示例中的ICommand更改为引用Windows.UI.Xaml.Input.ICommand,那么它将不会编译-请参阅