整个片段的 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
转换为 FirstFragmentViewModel
和 FirstViewModel
,这没有意义。 Activity 和每个片段都应该有自己独立的 ViewModels。
尝试进行此更改,看看是否有效:
AddTab<FirstFragmentView>("1", "Tab 1", args, new FirstFragmentViewModel());
我无法将点击事件从布局绑定到 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
转换为 FirstFragmentViewModel
和 FirstViewModel
,这没有意义。 Activity 和每个片段都应该有自己独立的 ViewModels。
尝试进行此更改,看看是否有效:
AddTab<FirstFragmentView>("1", "Tab 1", args, new FirstFragmentViewModel());