我有Android使用Xamarin C#和MVVM Cross的问题。 程序创建主要活动,但在使用ShowViewModel(TripsViewModel)时提供异常。在trips.xml中我使用Mvx.MvxListView,因为这是一个动态列表视图。我不知道我的坏处:(我看了很多页/教程和问题。也许我不会写点什么。
错误很少。如果我修一个,它会显示下一个:/
TripsViewModel.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
}
MainViewModel.cs
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>();
}
}
TripListFragment.cs
[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);
}
}
MainActivity.cs
[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;
}