整个片段的 Mvvm 交叉导航

Mvvm Cross Navigation throughout fragments

我无法将点击事件从布局绑定到 ViewModel。

我想使用 MVVM Cross 5.6 在两个片段中进行导航。 我正在使用原生 Xamarin.Android.

首先,我创建了一个 ViewModel:

public class FirstFragmentViewModel : MvxViewModel
{
   public ICommand NavigateCommand => new MvxCommand(() => { 
     this.ShowViewModel<ProfileFragmentViewModel>(); });
}

使用的布局是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:background="#005000"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Navigate"
        local:MvxBind="Click NavigateCommand"
        android:background="#ffec4747"
        android:clickable="true"/>
</LinearLayout>

然后,我创建了一个片段:

public class FirstFragmentView : MvxFragment<FirstFragmentViewModel>
{
   public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   {
        base.OnCreateView(inflater, container, savedInstanceState);
        return this.BindingInflate(Resource.Layout.FirstFragmentView, null);
   }
}

FirstFragmentView 在此处初始化:

[Activity(MainLauncher = true)]
public class TabView : MvxTabsFragmentActivity
{
    public TabView()
        : base(Resource.Layout.Home, Resource.Id.actualtabcontent)
    {
    }

    public FirstFragmentViewModel FirstViewModel => (FirstFragmentViewModel)this.ViewModel;
    public FirstViewModel SecondViewModel => (FirstViewModel)this.ViewModel;

    protected override void AddTabs(Bundle args)
    {
        AddTab<FirstFragmentView>("1", "Tab 1", args, FirstViewModel);
        AddTab<SecondFragmentView>("2", "Tab 2", args, SecondViewModel);
    }

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
    }
}

显示了按钮,但它处于禁用状态,点击它没有任何反应。

您调用时似乎传入了错误的 ViewModel:

AddTab<FirstFragmentView>("1", "Tab 1", args, FirstViewModel);

您 Activity 中的以下几行看起来很可疑:

public FirstFragmentViewModel FirstViewModel => (FirstFragmentViewModel)this.ViewModel;
public FirstViewModel SecondViewModel => (FirstViewModel)this.ViewModel

您正在将 this.ViewModel 转换为 FirstFragmentViewModelFirstViewModel,这没有意义。 Activity 和每个片段都应该有自己独立的 ViewModels。

尝试进行此更改,看看是否有效:

 AddTab<FirstFragmentView>("1", "Tab 1", args, new FirstFragmentViewModel());