C# 如何替换Activity use viewmodel中的片段
我对Android使用Xamarin C#和MVVM Cross有问题。 程序创建主活动,但在使用ShowViewModel(TripsViewModel)时给出异常。在trips.xml中,我使用Mvx.MvxListView,因为这是一个动态列表视图。我不知道我有什么不好:(我看了好几页/教程,仍然有问题。也许我没有写什么东西 错误很少。如果我修复了一个,它将显示下一个:/ TripsViewModel.csC# 如何替换Activity use viewmodel中的片段,c#,xamarin,mvvm,mvvmcross,viewmodel,C#,Xamarin,Mvvm,Mvvmcross,Viewmodel,我对Android使用Xamarin C#和MVVM Cross有问题。 程序创建主活动,但在使用ShowViewModel(TripsViewModel)时给出异常。在trips.xml中,我使用Mvx.MvxListView,因为这是一个动态列表视图。我不知道我有什么不好:(我看了好几页/教程,仍然有问题。也许我没有写什么东西 错误很少。如果我修复了一个,它将显示下一个:/ TripsViewModel.cs public class TripsViewModel : MvxViewMode
public class TripsViewModel : MvxViewModel
{
private readonly IUserRepository _userRepository;
private readonly ITripsRepository _tripsRepostitory;
public TripsViewModel()
{
}
private MvxObservableCollection<Trip> _searchTripsList;
public MvxObservableCollection<Trip> SearchTripsList
{
get { return _searchTripsList; }
set
{
_searchTripsList = value;
RaisePropertyChanged(() => SearchTripsList);
}
}
private Trip _selectedTrip;
public Trip SelectedTrip
{
get { return _selectedTrip; }
set
{
_selectedTrip = value;
RaisePropertyChanged(() => SelectedTrip);
}
}
public TripsViewModel(IUserRepository userRepository)
{
_userRepository = userRepository;
}
#endregion
#region VM LifeCycle
public void Init()
{
}
public override void Start()
{
base.Start();
}
public void ReloadState(SavedState savedState)
{
}
public SavedState SaveState()
{
return new SavedState() { };
}
public class SavedState{
//add save state class
}
#endregion
}
public class MainViewModel : MvxViewModel
{
private readonly Lazy<TripsViewModel> _tripsViewModel;
public TripsViewModel TripsViewModel => _tripsViewModel.Value;
public MainViewModel()
{
_tripsViewModel = new Lazy<TripsViewModel>(Mvx.IocConstruct<TripsViewModel>);
}
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
public void ShowTripsList()
{
ShowViewModel<TripsViewModel>();
}
}
[MvxFragmentPresentationAttribute(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register("GTMS.MobileNative.Droid.Views.TripsListFragment")]
public class TripsListFragment : MvxFragment<TripsViewModel>
{
public TripsListFragment()
{
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.trips, container);
}
}
[Activity(Label = "MainActivity", MainLauncher = true)]
public class MainActivity : MvxAppCompatActivity<MainViewModel>
{
private BottomNavigationView bottomNavigation;
private DrawerLayout _drawerLayout;
internal DrawerLayout DrawerLayout { get { return _drawerLayout; } }
private FragmentManager _fragmentManager;
static MainActivity instance = new MainActivity();
public static MainActivity CurrentActivity => instance;
public new MainViewModel ViewModel
{
get { return (MainViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
_fragmentManager = FragmentManager;
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += NavigationItemSelected;
/*zmiana pomiedzy fragmentami*/
ViewModel.ShowTripsList();
//ViewModel.NavigateToFragment(0);
// Create your application here
}
private void NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
Android.Support.V4.App.Fragment fragment = null;
switch (e.Item.ItemId)
{
case Resource.Id.menu_home:
ViewModel.ShowTripsList();
break;
case Resource.Id.menu_audio:
//fragment = Fragment2.NewInstance();
break;
case Resource.Id.menu_video:
// fragment = Fragment3.NewInstance();
break;
}
if (fragment == null)
return;
}
公共类TripsViewModel:MvxViewModel
{
专用只读IUserRepository\u userRepository;
专用只读ITripsRepository\u TripsReplicatory;
公共TripsViewModel()
{
}
私有MvxObservableCollection\u searchTripsList;
公共MvxObservableCollection SearchTripList
{
获取{return\u searchTripsList;}
设置
{
_searchTripsList=值;
RaisePropertyChanged(()=>SearchTripList);
}
}
私人旅行_选择Trip;
公共交通选择Trip
{
获取{return\u selectedTrip;}
设置
{
_selectedTrip=值;
RaisePropertyChanged(()=>SelectedTrip);
}
}
公共TripsViewModel(IUserRepository userRepository)
{
_userRepository=userRepository;
}
#端区
#区域虚拟机生命周期
公共void Init()
{
}
公共覆盖无效开始()
{
base.Start();
}
公共void重载状态(SavedState SavedState)
{
}
公共SavedState SaveState()
{
返回新的SavedState(){};
}
公共类存储状态{
//添加保存状态类
}
#端区
}
MainViewModel.cs
public class TripsViewModel : MvxViewModel
{
private readonly IUserRepository _userRepository;
private readonly ITripsRepository _tripsRepostitory;
public TripsViewModel()
{
}
private MvxObservableCollection<Trip> _searchTripsList;
public MvxObservableCollection<Trip> SearchTripsList
{
get { return _searchTripsList; }
set
{
_searchTripsList = value;
RaisePropertyChanged(() => SearchTripsList);
}
}
private Trip _selectedTrip;
public Trip SelectedTrip
{
get { return _selectedTrip; }
set
{
_selectedTrip = value;
RaisePropertyChanged(() => SelectedTrip);
}
}
public TripsViewModel(IUserRepository userRepository)
{
_userRepository = userRepository;
}
#endregion
#region VM LifeCycle
public void Init()
{
}
public override void Start()
{
base.Start();
}
public void ReloadState(SavedState savedState)
{
}
public SavedState SaveState()
{
return new SavedState() { };
}
public class SavedState{
//add save state class
}
#endregion
}
public class MainViewModel : MvxViewModel
{
private readonly Lazy<TripsViewModel> _tripsViewModel;
public TripsViewModel TripsViewModel => _tripsViewModel.Value;
public MainViewModel()
{
_tripsViewModel = new Lazy<TripsViewModel>(Mvx.IocConstruct<TripsViewModel>);
}
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
public void ShowTripsList()
{
ShowViewModel<TripsViewModel>();
}
}
[MvxFragmentPresentationAttribute(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register("GTMS.MobileNative.Droid.Views.TripsListFragment")]
public class TripsListFragment : MvxFragment<TripsViewModel>
{
public TripsListFragment()
{
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.trips, container);
}
}
[Activity(Label = "MainActivity", MainLauncher = true)]
public class MainActivity : MvxAppCompatActivity<MainViewModel>
{
private BottomNavigationView bottomNavigation;
private DrawerLayout _drawerLayout;
internal DrawerLayout DrawerLayout { get { return _drawerLayout; } }
private FragmentManager _fragmentManager;
static MainActivity instance = new MainActivity();
public static MainActivity CurrentActivity => instance;
public new MainViewModel ViewModel
{
get { return (MainViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
_fragmentManager = FragmentManager;
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += NavigationItemSelected;
/*zmiana pomiedzy fragmentami*/
ViewModel.ShowTripsList();
//ViewModel.NavigateToFragment(0);
// Create your application here
}
private void NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
Android.Support.V4.App.Fragment fragment = null;
switch (e.Item.ItemId)
{
case Resource.Id.menu_home:
ViewModel.ShowTripsList();
break;
case Resource.Id.menu_audio:
//fragment = Fragment2.NewInstance();
break;
case Resource.Id.menu_video:
// fragment = Fragment3.NewInstance();
break;
}
if (fragment == null)
return;
}
public类主视图模型:MvxViewModel
{
私有只读Lazy_tripsViewModel;
public TripsViewModel TripsViewModel=>\u TripsViewModel.Value;
公共主视图模型()
{
_tripsViewModel=新的惰性(Mvx.IocConstruct);
}
公共void ShowMenu()
{
ShowViewModel();
}
公开作废ShowTripsList()
{
ShowViewModel();
}
}
TripListFragment.cs
public class TripsViewModel : MvxViewModel
{
private readonly IUserRepository _userRepository;
private readonly ITripsRepository _tripsRepostitory;
public TripsViewModel()
{
}
private MvxObservableCollection<Trip> _searchTripsList;
public MvxObservableCollection<Trip> SearchTripsList
{
get { return _searchTripsList; }
set
{
_searchTripsList = value;
RaisePropertyChanged(() => SearchTripsList);
}
}
private Trip _selectedTrip;
public Trip SelectedTrip
{
get { return _selectedTrip; }
set
{
_selectedTrip = value;
RaisePropertyChanged(() => SelectedTrip);
}
}
public TripsViewModel(IUserRepository userRepository)
{
_userRepository = userRepository;
}
#endregion
#region VM LifeCycle
public void Init()
{
}
public override void Start()
{
base.Start();
}
public void ReloadState(SavedState savedState)
{
}
public SavedState SaveState()
{
return new SavedState() { };
}
public class SavedState{
//add save state class
}
#endregion
}
public class MainViewModel : MvxViewModel
{
private readonly Lazy<TripsViewModel> _tripsViewModel;
public TripsViewModel TripsViewModel => _tripsViewModel.Value;
public MainViewModel()
{
_tripsViewModel = new Lazy<TripsViewModel>(Mvx.IocConstruct<TripsViewModel>);
}
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
public void ShowTripsList()
{
ShowViewModel<TripsViewModel>();
}
}
[MvxFragmentPresentationAttribute(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register("GTMS.MobileNative.Droid.Views.TripsListFragment")]
public class TripsListFragment : MvxFragment<TripsViewModel>
{
public TripsListFragment()
{
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.trips, container);
}
}
[Activity(Label = "MainActivity", MainLauncher = true)]
public class MainActivity : MvxAppCompatActivity<MainViewModel>
{
private BottomNavigationView bottomNavigation;
private DrawerLayout _drawerLayout;
internal DrawerLayout DrawerLayout { get { return _drawerLayout; } }
private FragmentManager _fragmentManager;
static MainActivity instance = new MainActivity();
public static MainActivity CurrentActivity => instance;
public new MainViewModel ViewModel
{
get { return (MainViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
_fragmentManager = FragmentManager;
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += NavigationItemSelected;
/*zmiana pomiedzy fragmentami*/
ViewModel.ShowTripsList();
//ViewModel.NavigateToFragment(0);
// Create your application here
}
private void NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
Android.Support.V4.App.Fragment fragment = null;
switch (e.Item.ItemId)
{
case Resource.Id.menu_home:
ViewModel.ShowTripsList();
break;
case Resource.Id.menu_audio:
//fragment = Fragment2.NewInstance();
break;
case Resource.Id.menu_video:
// fragment = Fragment3.NewInstance();
break;
}
if (fragment == null)
return;
}
[MvxFragmentPresentationAttribute(typeof(MainViewModel),Resource.Id.content\u frame,true)]
[注册表(“GTMS.mobilenactive.Droid.Views.TripsListFragment”)]
公共类TripsListFragment:MvxFragment
{
公共TripsListFragment()
{
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
base.OnCreateView(充气机、容器、保存状态);
返回此.BindingInflate(Resource.Layout.trips,container);
}
}
MainActivity.cs
public class TripsViewModel : MvxViewModel
{
private readonly IUserRepository _userRepository;
private readonly ITripsRepository _tripsRepostitory;
public TripsViewModel()
{
}
private MvxObservableCollection<Trip> _searchTripsList;
public MvxObservableCollection<Trip> SearchTripsList
{
get { return _searchTripsList; }
set
{
_searchTripsList = value;
RaisePropertyChanged(() => SearchTripsList);
}
}
private Trip _selectedTrip;
public Trip SelectedTrip
{
get { return _selectedTrip; }
set
{
_selectedTrip = value;
RaisePropertyChanged(() => SelectedTrip);
}
}
public TripsViewModel(IUserRepository userRepository)
{
_userRepository = userRepository;
}
#endregion
#region VM LifeCycle
public void Init()
{
}
public override void Start()
{
base.Start();
}
public void ReloadState(SavedState savedState)
{
}
public SavedState SaveState()
{
return new SavedState() { };
}
public class SavedState{
//add save state class
}
#endregion
}
public class MainViewModel : MvxViewModel
{
private readonly Lazy<TripsViewModel> _tripsViewModel;
public TripsViewModel TripsViewModel => _tripsViewModel.Value;
public MainViewModel()
{
_tripsViewModel = new Lazy<TripsViewModel>(Mvx.IocConstruct<TripsViewModel>);
}
public void ShowMenu()
{
ShowViewModel<MenuViewModel>();
}
public void ShowTripsList()
{
ShowViewModel<TripsViewModel>();
}
}
[MvxFragmentPresentationAttribute(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register("GTMS.MobileNative.Droid.Views.TripsListFragment")]
public class TripsListFragment : MvxFragment<TripsViewModel>
{
public TripsListFragment()
{
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
return this.BindingInflate(Resource.Layout.trips, container);
}
}
[Activity(Label = "MainActivity", MainLauncher = true)]
public class MainActivity : MvxAppCompatActivity<MainViewModel>
{
private BottomNavigationView bottomNavigation;
private DrawerLayout _drawerLayout;
internal DrawerLayout DrawerLayout { get { return _drawerLayout; } }
private FragmentManager _fragmentManager;
static MainActivity instance = new MainActivity();
public static MainActivity CurrentActivity => instance;
public new MainViewModel ViewModel
{
get { return (MainViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
_fragmentManager = FragmentManager;
bottomNavigation = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottomNavigation.NavigationItemSelected += NavigationItemSelected;
/*zmiana pomiedzy fragmentami*/
ViewModel.ShowTripsList();
//ViewModel.NavigateToFragment(0);
// Create your application here
}
private void NavigationItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
Android.Support.V4.App.Fragment fragment = null;
switch (e.Item.ItemId)
{
case Resource.Id.menu_home:
ViewModel.ShowTripsList();
break;
case Resource.Id.menu_audio:
//fragment = Fragment2.NewInstance();
break;
case Resource.Id.menu_video:
// fragment = Fragment3.NewInstance();
break;
}
if (fragment == null)
return;
}
[活动(Label=“MainActivity”,MainLauncher=true)]
公共类MainActivity:MvxAppCompatActivity
{
私有底部导航查看底部导航;
私人抽屉布局_抽屉布局;
内部抽屉布局抽屉布局{get{return}
私人碎片管理器\u碎片管理器;
静态MainActivity实例=新的MainActivity();
公共静态MainActivity CurrentActivity=>instance;
公共新主视图模型视图模型
{
获取{return(MainViewModel)base.ViewModel;}
设置{base.ViewModel=value;}
}
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.main);
_fragmentManager=fragmentManager;
bottomNavigation=findviewbyd(Resource.Id.bottom\u navigation);
bottomNavigation.NavigationItemSelected+=NavigationItemSelected;
/*波米耶兹碎片*/
ViewModel.ShowTripsList();
//ViewModel.NavigateToFragment(0);
//在此处创建应用程序
}
private void NavigationItemSelected(对象发送方,底部导航视图。导航项SelectedEventArgs e)
{
Android.Support.V4.App.Fragment Fragment=null;
开关(例如Item.ItemId)
{
案例资源.Id.menu\u主页:
ViewModel.ShowTripsList();
打破
案例资源.Id.menu\u音频:
//fragment=Fragment2.NewInstance();
打破
案例资源.Id.menu\u视频:
//fragment=Fragment3.NewInstance();
打破
}
if(片段==null)
返回;
}