我正在尝试用MVVMCross实现我的导航抽屉,但是我无法获得要显示的片段。(这不是导航抽屉的问题,而是片段和MVVMCross的问题)。
这是我的示例中的代码(在MVVMCross的github上找到),参见下面的github链接!
我有一个扩展FrameLayout的活动,这是包含MvxCachingFragmentCompatActivity<MainViewModel>的MainActivity (称为Resource.Id.content_frame)。
我有一个叫MvxFragment的FirstFragment
[MvxFragment(typeof(MainViewModel), Resource.Id.content_frame, true)]
[Register(nameof(FirstFragment))]
public class FirstFragment : MvxFragment<FirstViewModel>
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.FirstView, container, false);
return view;
}
}我的MainViewModel中还添加了以下代码
public class MainViewModel : MvxViewModel
{
private readonly IMvxNavigationService _navigationService;
public MainViewModel(IMvxNavigationService navigationService)
{
_navigationService = navigationService;
}
public override async Task Initialize()
{
await _navigationService.Navigate<FirstViewModel>();
}
}Github链接:
发布于 2017-08-16 13:57:38
我发现了=>的问题,显然MvxNavigationService出于某种原因不喜欢MvxCachingFragmentCompatActivity。
第一样本(工作)
在第一样本中,我直接在从MvxCachingFragmentCompatActivity扩展的MainViewModel上执行MainViewModel。这是完美的
一些代码示例(有关完整代码,请参阅链接)
public class App : MvvmCross.Core.ViewModels.MvxApplication
{
public override void Initialize()
{
RegisterAppStart<MainViewModel>();
}
}MainViewModel : MvxViewModel
public MainViewModel(IMvxNavigationService navigationService)
{
_navigationService = navigationService;
Init();
}
public async void Init()
{
await _navigationService.Navigate<FirstViewModel>();
}第二样本(发行)
在第二样本 中,我首先调用另一个活动(StartActivity),然后转到MainActivity。这给了problems,因为MainViewModel不是用 RegisterAppStart<>调用的,而是用调用的。
一些代码示例(有关完整代码,请参阅链接)
public class App : MvvmCross.Core.ViewModels.MvxApplication
{
public override void Initialize()
{
RegisterAppStart<StartViewModel>();
}
}StartViewModel:
public class StartViewModel : MvxViewModel
{
private readonly IMvxNavigationService _navigationService;
public ICommand StartCommand => new MvxCommand(ExecuteStart);
public StartViewModel()
{
_navigationService = Mvx.Resolve<IMvxNavigationService>();
}
private async void ExecuteStart()
{
await _navigationService.Navigate<MainViewModel>();
}
}差异:
RegisterAppStart<StartViewModel>();await _navigationService.Navigate<MainViewModel>();https://stackoverflow.com/questions/45629223
复制相似问题