【问题标题】:MVVMCross+Android: DataBinding Context Menu options on ViewModel properties?MVVMCross+Android:ViewModel 属性上的 DataBinding 上下文菜单选项?
【发布时间】:2014-05-22 03:35:53
【问题描述】:

如何将我的菜单选项属性(例如 Enabled 属性)数据绑定到 ViewModel 属性?

我的菜单是在我的 MvxActivity-inherited 类中创建的,如下所示:

public override void OnCreateContextMenu( IContextMenu menu, View v, IContextMenuContextMenuInfo info )
{
        switch (v.Id)
        {
            case Resource.Id.textView1:
                menu.Add( 0, 0, 0, "Menu Option1" );
                menu.Add( 0, 1, 0, "Menu Option2" );

                break;
            case Resource.Id.textView2:
                menu.Add( 0, 2, 0, "Menu Option3" );
                menu.Add( 0, 3, 0, "Menu Option4" );

                break;
        ...
        }
        ...
}

我知道我可以启用/禁用单个菜单项,如下所示:

IMenuItem menuOption = menu.FindItem( 1 ); // Refers to "Menu Option2" above

if (menuOption != null)
{
    menuOption.SetEnabled(false);
}

但是如何使用 MVVMCross 绑定来实现这一点?我想我可以在 C#(动态)中做到这一点,但我不确定如何做到这一点。谁能给我看看?

提前致谢。

【问题讨论】:

    标签: android mvvmcross


    【解决方案1】:

    由于菜单是“按需”创建的,所以我通常通过使用 ViewModel 当前属性实现 SetEnabled 类型的东西来处理这个问题。

    例如

      var myViewModel = (MyViewModel)ViewModel;
      var menuOption = menu.FindItem( 1 ); // Refers to "Menu Option2" above
      menuOption.SetEnabled(myViewModel.CanDoSomething);
    

    更聪明 - 更多“绑定”选项可用 - 例如我们可以创建一个菜单包装对象来自动连接 - 但在我使用菜单的少数情况下,我发现这种 ViewModel 方法可以正常工作

    【讨论】:

    • 谢谢。事实上,这就是我最后所做的。我只是从 OnCreateContextMenu() 中调用上面代码 sn-p 的最后两行。我只是想知道是否有一种方法可以动态地进行绑定,就像在 iOS 中一样(正如我从另一个 SO 问题中发现的那样)。但是您能否提供一个代码 sn-p 用于“更聪明的 - 更多“绑定”选项可用 - 例如,我们可以创建一个菜单包装对象来自动连接”
    猜你喜欢
    • 2012-06-08
    • 2010-11-22
    • 2023-03-14
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多