Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MvvmCross、Xamarin Studio和ICommands_Xamarin_Mvvmcross_Icommand - Fatal编程技术网

MvvmCross、Xamarin Studio和ICommands

MvvmCross、Xamarin Studio和ICommands,xamarin,mvvmcross,icommand,Xamarin,Mvvmcross,Icommand,我的问题出生于年。MvvmCross在Visual Studio中运行良好。然而,我已经被授权使用Xamarin Studio联合部署它,这正是他们的构建服务器所使用的。我遇到了System.Windows.Input.ICommand的问题,在我的Xamarin Studio构建过程中,编译器找不到该问题。ICommand似乎在MvvmCross中广泛用于用户命令(MvxCommand,它实现System.Windows.Input.ICommand)。我已尝试通过以下代码创建自己的IComm

我的问题出生于年。MvvmCross在Visual Studio中运行良好。然而,我已经被授权使用Xamarin Studio联合部署它,这正是他们的构建服务器所使用的。我遇到了System.Windows.Input.ICommand的问题,在我的Xamarin Studio构建过程中,编译器找不到该问题。ICommand似乎在MvvmCross中广泛用于用户命令(MvxCommand,它实现System.Windows.Input.ICommand)。我已尝试通过以下代码创建自己的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)

瞧,它在建造。它可以部署。这让我很兴奋。但是它不起作用。任何我将UI元素绑定到自定义ICommand的地方都不会做任何事情。这就好像从控件的单击事件到视图模型的命令的绑定不再存在一样,不管我是在.axml布局文件中绑定它。。。或者使用视图内置的CreateBindingSet方法

现在。。。我可以为一些事情绕开它。。。例如,如果我使用标准的android按钮,并从内置的Click事件手动调用view模型的命令,如:

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,而我觉得它应该可行。。。所以在我走到另一条路来解决这个问题之前,我想看看是否有人能了解我做错了什么。

简单的解决方案是:

  • System.Windows.Input.ICommand的Xamarin版本提供您自己的实现并使用此实现
  • 或者使用构建在mac上的mvvmcross二进制文件
我推荐第一种


如果删除Something.Common.ICommand代码,然后将MyCommand类实现与viewmodels放在同一个项目/程序集中,那么它们应该可以在windows和mac上正常构建和运行。

您能详细说明一下吗?我遇到的情况与我必须提供自定义命令实现的情况相同。我基本上已经将MvxCommand复制到我的ViewModel项目中,重命名了它并删除了接口,但是我无法使用它进行绑定。还有什么我需要做的吗?好的,上面的评论不再相关了。我仍然无法绑定我的自定义命令,但是我已经成功地更新到了最新的MvvmCross版本(3.0.12),现在我可以很高兴地使用MvxCommand进行构建(似乎没有更多的ICommand疯狂问题)