首页 文章

MvvmCross,Xamarin Studio和ICommands

提问于
浏览
1

我的问题出生于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 回答

  • 0

    简单的解决方案是:

    • 要么为Xamarin版本的 System.Windows.Input.ICommand 提供您自己的实现并使用此实现

    • 或使用在mac上构建的mvvmcross二进制文件 .

    我推荐第一个 .

    如果你删除你的Something.Common.ICommand代码abd然后将你的MyCommand类实现放在与viewmodels相同的项目/程序集中,那么它们应该在windows和mac上构建并运行良好 .

相关问题