MVVCross:将枚举值作为 Android 的 CommandParameter 传递

2024-03-30

我想将枚举值作为命令参数传递。 我的枚举定义为:

public enum MyEnum
{
   One,
   Two
}

在我的 axml 中我有:

local:MvxBind="Click MyCommand, CommandParameter=MyEnum.One"
...
local:MvxBind="Click MyCommand, CommandParameter=MyEnum.Two"

MyCommand 在我的 ViewModel 中定义为

public IMvxCommand MyCommand
{
  get { return new MvxCommand<MyEnum>(myfunction); }
}

private void myfunction(MyEnum p_enumParam)
{
  switch (p_enumParam)
  {
      case MyEnum.One:
          doSomething1();
          break;
      case MyEnum.Two:
          doSomething2();
          break;
  }
}

当我运行它时,出现错误“System.InvalidCastException:无法从源类型转换为目标类型。”

显然,因为它无法投射MyEnum.One and MyEnum.Two到 MyEnum 类型。那么我怎样才能说服它MyEnum.One and MyEnum.Two are of MyEnum type?

谢谢, 巴氏


MvvmCross 无法从绑定语句中猜测枚举的类型 - 因此它无法执行此绑定。

最简单的方法可能是使用以下方法解决此问题strings 相反 - 然后你将需要使用Enum.Parse从字符串到 ViewModel 中的枚举。


另一种方法是,您还可以实现一个枚举解析 ValueConverter,它只解析字符串 - 例如你可以基于https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/ValueConverters/MvxCommandParameterValueConverter.cs https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross.Binding/ValueConverters/MvxCommandParameterValueConverter.cs- 你可以添加Enum.Parse以此来创建:

public class MyEnumCommandValueConverter
    : MvxValueConverter<ICommand, ICommand>
{
    protected override ICommand Convert(ICommand value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return new MvxWrappingCommand(value, Enum.Parse(typeof(MyEnum), parameter.ToString()));
    }
}

然后,您可以使用嵌套进行绑定 - 使用类似以下内容:

local:MvxBind="Click MyEnumCommand(MyCommand, 'Two')"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVCross:将枚举值作为 Android 的 CommandParameter 传递 的相关文章

  • 从 TimerTask 的 run 方法更新 TextView 时出错

    我正在尝试测试 UI 和 Timer 类的可能性 所以我尝试了以下练习 TestTimerActivity java package com tvt TestTimer import android app Activity import
  • 进度条中形状的填充

    我正在使用 xml 文件来定义进度条 我在背景形状上定义了填充 但这个设置有时会正确显示 有时则不能 因此 如果我启动内部带有进度条的应用程序或活动 则会正确显示带有背景和 填充 进度的进度条 然后我关闭我的应用程序并再次启动它 并且 进度
  • 如何在不清除和闪烁地图的情况下刷新谷歌地图上的标记位置?

    是否可以创建无需闪烁 清除整个地图即可更新的 Google 地图 V2 标记 目前我必须清除地图然后添加标记 googleMap clear googleMap addMarker new MarkerOptions position en
  • 检索特定联系人的组

    我想检索联系方式及其所属的组 我得到了列出手机中所有联系人组的代码 Cursor groupC getContentResolver query ContactsContract Groups CONTENT URI null null n
  • 无法从 https 下载 .apk

    我为我的客户开发了一个 Android 应用程序 我不想在 Play 商店上发布它 我已将其托管在我的客户端网站上 asp net 我已使用 MIME 类型 apk application vnd android package archi
  • 如何监听自定义 URI

    我正在开发一个有自己的 URI 前缀的应用程序 在本例中为 dchub 到处搜索并阅读了很多 但我有点困惑 当有人点击以以下开头的链接时 是否可以启动我的应用程序dchub 在浏览器中 到目前为止 找到了很多从应用程序打开浏览器的其他示例
  • Android:由于 Web 服务 Http 请求,活动显示时间过长

    我的一项活动是在启动应用程序时向 Web 服务发出 http 请求以获取一些天气数据 由于 Web 服务请求 活动需要 3 4 秒才能显示的问题 在实际设备上测试 我知道我没有以正确的方式这样做 我所做的就是在 onCreate 方法上 我
  • Unity 2018.3 android dex合并问题

    在您决定将这篇文章视为 重复 而不阅读它之前 请了解我已经查看了大量与此主题相关的帖子 但我找不到适合我的实例的解决方案 包括 StackOverflow 建议的所有解决方案 大多数帖子都是针对 Android Studio 而不是 Uni
  • 如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

    如何使用远程 URL 在 Android 模拟器中播放 mp4 视频 我使用了以下代码 但此代码给我错误 抱歉 该视频无法播放 07 05 16 58 19 525 INFO AwesomePlayer 34 mConnectingData
  • Android接收短信Intent:获取消息Id或线程Id

    我已经注册了一个广播监听器来接收android provider Telephony SMS DELIVER意向行动 我似乎能够获取这条新消息的正文和发件人电话号码 但是我无法获取此新消息的消息 ID 或线程 ID 我发现的唯一方法是搜索消
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • Visual Studio 2013 Intellisense 不会将枚举类型放在方法参数的位置

    例如 我有以下代码 namespace VS2013 EnumTypes class Program enum SomeEnum One Two static void SomeMethod SomeEnum someEnum some c
  • 在 Android 应用程序中使用传单来显示在线地图

    是否有任何示例项目展示如何正确使用传单在 Android 应用程序中显示在线地图 因为我尝试了很多示例 但每次我的应用程序中都有一个空的网络视图 这是我的代码 private WebView mWebView Override protec
  • 未找到 ID 为“com.android.feature”的插件

    在将我现有的应用程序转换为即时应用程序时 使用这个 Codelab 教程 https codelabs developers google com codelabs android instant apps 遇到这个错误 Plugin wi
  • 调用 MediaScannerConnection.scanFile 后,MediaStore 内的 Android 缩略图不会刷新

    我正在尝试构建一个类似画廊的应用程序 它将在外部存储上执行以下功能 列出所有包含图像的文件夹 列出所有可供公众使用的图像 不会探测里面的文件Android data 到目前为止 我可以列出所有图像以及包含图像的文件夹 然而 我后来发现这些图
  • android Analytics v4 最简化

    我正在尝试以最简单的方式将谷歌分析连接到我的应用程序 我想实现analytics v4 因为google说他们很快就会强制升级到它 所以我不想做两次同样的工作 在这种情况下 谷歌的教程不是很有效 合并他们在那里所说的内容和我在互联网上找到的
  • 如何以编程方式查找Android手机的电池充电时间?

    我想知道我们如何找到 Android 设备将电池充满电需要多长时间 例如 如果我的电池电量为 0 则充满电 即 100 需要多长时间 如果我的设备电量为 70 则相同 因此如果我现在连接充电器 则需要多长时间才能充满我的设备 这对我有用 p
  • 如何获取特定 GLSurfaceView 的 EGL 显示/上下文

    这是后续我原来的问题 https stackoverflow com questions 6509588 egl vs gles 2 0 on android e g java 这可能太宽泛 而这个可能太具体 但也许我可以应用牛顿法 我的具
  • 使用本机短信编辑器发送短信后如何返回意图

    我正在使用下面的代码使用本机短信编辑器发送短信 Intent intent new Intent Intent ACTION VIEW intent putExtra address 1234567890 intent putExtra s
  • 绑定 Ember TextField 中的计算属性

    我正在尝试将我的数据模型绑定到 Ember js 中的文本字段 该模型有一个表示货币值的字段 例如 1 000 50 然后用户可以更改该值 Ember 接收数字 1000 50 形式的数据 非货币格式 我将视图绑定到具有良好格式的计算属性

随机推荐