首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MvxCommand与CommandParameter绑定

使用MvxCommand与CommandParameter绑定
EN

Stack Overflow用户
提问于 2013-06-21 11:49:38
回答 2查看 11.9K关注 0票数 12

我正在尝试使用fire MvxCommand与CommandParameter,但面临以下问题: MyView.axml包含:

代码语言:javascript
复制
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        local:MvxBind="Click MyCommand, CommandParameter=foo" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2"
        local:MvxBind="Click MyCommand, CommandParameter=bar" />
</LinearLayout>

MyViewModel.cs:

代码语言:javascript
复制
public class MyViewModel : MvxViewModel
{
    public ICommand MyCommand { get; private set; }

    public MyViewModel()
    {                                    // param is null
      MyCommand = new MvxCommand<string>(param =>
      {
          if (param == "foo")               
          {
            // do something
          }
          else if (param == "bar")
          {
            // do something else
          }
      });
    }
}

但是,当我检查param变量是时。

我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 13:16:46

您的代码在我的源代码树的头上为我工作。

但这一功能只有两周的历史。

我的猜测是,这个特性要么没有进入您正在使用的发布版本,要么存在一个bug。

您能检查一下这个绑定的调试跟踪吗?那里有什么消息吗?

  • 如果跟踪表明CommandParameter是一个未知的符号,那么我猜您需要自己构建最新的源代码--或者等待新版本的发布。
  • 如果跟踪提示了其他问题,那么在安装过程中您可能能够修补这个问题。

我知道我们修复了一个值转换问题,其中基于Cirrious.MvvmCross.Binding.dllValueConverter不只是通过覆盖Setup.ValueConverterAssemblies来注册这个CommandParameter所需的ValueConverter

票数 10
EN

Stack Overflow用户

发布于 2018-12-30 20:27:13

我今天正在做CommandParameter编码,您需要做几个修复。axml代码应该包含CommandParameter='yourParameter‘,如下所示:

代码语言:javascript
复制
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button1"
    local:MvxBind="Click MyCommand, CommandParameter='foo'" />
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button2"
    local:MvxBind="Click MyCommand, CommandParameter='bar'" />

即使您想要捕获Integer,仍然需要以单引号传递它,如下所示:Command参量=‘1234’

在C#代码中,最重要的是从构造函数中删除MvxCommand。这应视为财产。

代码语言:javascript
复制
public class MyViewModel : MvxViewModel
{
    public MyViewModel() { }

    public MvxCommand<string> MyCommand
    {
        get
        {
            return new MvxCommand<string>(param => 
            {
                if (param == "foo")
                {
                    // do something
                }
                else if (param == "bar")
                {
                    // do something else
                }
            });
        }
    }
}

这是在MvvmCross6中完成的。对于以前的版本,它应该可以正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17234539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档