MVVMCross + Android:ViewModel属性上的DataBinding Context Menu选项?

时间:2014-03-17 10:25:29

标签: android mvvmcross

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

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

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#(动态)做到这一点,但我不知道该怎么做。有人能告诉我吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

因为菜单是按需创建的,所以#34;然后我通常只使用ViewModel当前属性实现SetEnabled类型的东西来处理它。

e.g。

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

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

答案 1 :(得分:0)

如何异步完成?我想在加载所有数据后才允许菜单项。我的ViewModel上有一个IsDataLoaded属性,但是当它改变时无法弄清楚如何启用菜单。