我正在尝试使用fire MvxCommand with CommandParameter,但面临以下问题: MyView.axml包含:
<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:
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 变量 null 。
我做错了什么?
答案 0 :(得分:10)
您的代码在我的源代码树头上为我工作。
但这个功能只有两周了。
我的猜测是,这个功能要么没有进入你正在使用的版本,要么就是它的错误。
您可以检查此绑定的调试跟踪吗?那里有信息吗?
CommandParameter
是未知符号,那么我的猜测是您需要自己构建最新的源代码 - 或者等待新的版本。我知道我们确实解决了一件事是价值转换器问题,其中基于Cirrious.MvvmCross.Binding.dll
的{{1}}并非只是通过覆盖ValueConverter
来注册Setup.ValueConverterAssemblies
此ValueConverter
答案 1 :(得分:1)
我今天正在进行CommandParameter编码,您需要做一些修复。 axml代码应包含CommandParameter ='yourParameter',如下所示:
<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'" />
即使您想捕获一个整数,您仍然需要使用单引号将其传递为:CommandParameter ='1234'
在C#代码中,最重要的是从构造函数中删除MvxCommand。这应视为“属性”。
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中完成的。它应该可以与以前的版本配合使用。