【问题标题】:MVVMCross Android button binding disables itMVVMCross Android 按钮绑定禁用它
【发布时间】:2018-10-12 10:54:09
【问题描述】:

我正在尝试使用 MvvmCross 将简单命令绑定到 Android 的按钮。 问题是,比我绑定命令,按钮进入禁用状态。

删除绑定local:MvxBind="Click GotoScreen2Command" 后,按钮已启用并可点击。

为什么会发生这种情况,我该如何解决?

MainContainerViewModel.cs:

public class MainContainerViewModel : BaseViewModel
{
    readonly IMvxNavigationService _navigationService;

    public IMvxAsyncCommand GotoScreen2Command { get; set; }

    public MainContainerViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;

        GotoScreen2Command = new MvxAsyncCommand(NavigateToScreen2Async);
    }

    private Task NavigateToScreen2Async()
    {
        return _navigationService.Navigate<Screen2ViewModel>();
    }
}

fragment_main.axml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_goToScreen2"
        android:text="Go to Screen2"
        android:gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        local:MvxBind="Click GotoScreen2Command"/>

</android.support.constraint.ConstraintLayout> 

这是我的 Android 视图。

MainFragment.cs:

[MvxFragmentPresentation(typeof(MainContainerViewModel), Resource.Id.content_frame)]
public class MainFragment : BaseFragment<MainViewModel>
{
    protected override int FragmentLayoutId => Resource.Layout.fragment_main;
}

还有MainContainerActivity.cs:

[Activity(
        Theme = "@style/AppTheme",
        WindowSoftInputMode = SoftInput.AdjustResize | SoftInput.StateHidden)]
    public class MainContainerActivity : BaseActivity<MainContainerViewModel>, IDrawerActivity
    {
        protected override int ActivityLayoutId => Resource.Layout.activity_main_container;                         
    }

【问题讨论】:

  • MainContainerViewModel 绝对是膨胀 fragment_main.axml 的 View 的 ViewModel 吗?我自己也遇到过这个问题,但只有当 ViewModel 上不存在按钮绑定的命令时。如果找不到该命令(例如拼写错误),则该按钮被禁用。
  • @wainy 我已经添加了活动代码。如您所见,MainContainerActivity 使用了MainContainerViewModel,但膨胀了fragment_main。我不确定我是否了解我的主要片段布局和活动如何连接到主容器活动和布局。可以给我解释一下吗?
  • 看来您需要将命令代码移动到 MainViewModel 中。您的 MainFragment 膨胀 Resource.Layout.Main,并且您的 MainFragment 绑定到您的 MainViewModel
  • @wainy 没错,这就是问题所在。将您的评论发布为答案,以便我将其标记为已回答的问题。谢谢。

标签: android xamarin.android mvvmcross


【解决方案1】:

您似乎需要将您的命令代码移至您的MainViewModel。你的MainFragment 膨胀Resource.Layout.Main,你的MainFragment 绑定到你的MainViewModel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2018-04-02
    • 2014-03-04
    相关资源
    最近更新 更多