我的问题出生于Does MvvmCross work in Xamarin Studio? . MvvmCross在Visual Studio中运行良好 . 但是,我已经尝试通过以下代码创建我自己的ICommand版本:
using System;
namespace Something.Common
{
public interface ICommand
{
event EventHandler CanExecuteChanged;
bool CanExecute(object parameter);
void Execute(object parameter);
}
}
一切都很好,但仍然没有修复MvxCommand,因为它实现了System.Windows.Input.ICommand接口 . 所以我创建了自己的版本MvxCommandEx,它基本上是从Stuart的MvxCommand复制而来,并实现了我自己的ICommand(Something.Common.ICommand) .
瞧,它 Build 起来了 . 它部署 . 这让我很兴奋 . 但是......它没有用 . 我将UI元素绑定到自定义ICommand的任何地方都没有做任何事情 . 就好像从控件的Click事件到视图模型的命令的绑定不再存在,我是否将它绑定在.axml布局文件中......或者使用内置于视图的CreateBindingSet方法 .
现在......我可以解决一些问题...例如,如果我使用标准的android按钮,并从内置的Click事件手动调用视图模型的命令,如:
btnAddScope.Click += (o, i) => { _ViewModel.RequestAddScope.Execute(null); };
它工作正常,我可以在此期间这样做,直到Xamarin发布他们的PCL支持 . 但我在应用程序的另一部分使用MvxListView,它使用如下语法绑定旧方式:
lst.ItemClick = _ViewModel.RequestViewScope;
其中lst是MvxListView .
但是,这不起作用,因为lst.ItemClick需要System.Windows.Input.ICommand,而我的ICommand不在该命名空间中 .
斯图尔特为此提供了解释,据说这应该起作用 . 但是,我感觉很愚蠢,因为它无法以实际工作的方式实现ICommand,当它感觉它应该工作时...所以在我走另一条路来解决这个问题之前,我想看看是否有人可以揭示我做错了什么 .
1 回答
简单的解决方案是:
要么为Xamarin版本的
System.Windows.Input.ICommand
提供您自己的实现并使用此实现或使用在mac上构建的mvvmcross二进制文件 .
我推荐第一个 .
如果你删除你的Something.Common.ICommand代码abd然后将你的MyCommand类实现放在与viewmodels相同的项目/程序集中,那么它们应该在windows和mac上构建并运行良好 .