Mvvm Cross Навигация по фрагментам - PullRequest
0 голосов
/ 29 января 2019

Я не могу связать событие click из макета с ViewModel.

Я хочу выполнить навигацию по двум фрагментам с помощью MVVM Cross 5.6.Я использую родной Xamarin.Android.

Сначала я создал ViewModel:

  {
     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);
        }
    }

Кнопка отображается, но находится в отключенном состоянии и при щелчке по ней ничего не происходит.

1 Ответ

0 голосов
/ 29 января 2019

Похоже, что вы передаете неправильную ViewModel при вызове:

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

Следующие строки в вашей деятельности выглядят подозрительно:

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

Вы используете this.ViewModelна FirstFragmentViewModel и FirstViewModel, что не имеет смысла.Упражнение и каждый из фрагментов должны иметь свои отдельные ViewModels.

Попробуйте внести это изменение и посмотрите, работает ли оно:

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