首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mvvmcross片段

Mvvmcross片段
EN

Stack Overflow用户
提问于 2017-08-11 07:20:31
回答 1查看 499关注 0票数 0

我正在尝试用MVVMCross实现我的导航抽屉,但是我无法获得要显示的片段。(这不是导航抽屉的问题,而是片段和MVVMCross的问题)。

这是我的示例中的代码(在MVVMCross的github上找到),参见下面的github链接!

我有一个扩展FrameLayout活动,这是包含MvxCachingFragmentCompatActivity<MainViewModel>MainActivity (称为Resource.Id.content_frame)。

我有一个叫MvxFragmentFirstFragment

代码语言:javascript
复制
[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中还添加了以下代码

代码语言:javascript
复制
public class MainViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navigationService;

    public MainViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;
    }

    public override async Task Initialize()
    {
        await _navigationService.Navigate<FirstViewModel>();
    }
}

Github链接:

  • 我的示例在下面的github!上是可见的
  • 这就是mvvmcross 示例
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 13:57:38

我发现了=>的问题,显然MvxNavigationService出于某种原因不喜欢MvxCachingFragmentCompatActivity

第一样本(工作)

第一样本中,我直接在从MvxCachingFragmentCompatActivity扩展的MainViewModel上执行MainViewModel。这是完美的

一些代码示例(有关完整代码,请参阅链接)

代码语言:javascript
复制
public class App : MvvmCross.Core.ViewModels.MvxApplication
{
    public override void Initialize()
    {
        RegisterAppStart<MainViewModel>();
    }
}

MainViewModel : MvxViewModel

代码语言:javascript
复制
public MainViewModel(IMvxNavigationService navigationService)
{
    _navigationService = navigationService;
    Init();
}

public async void Init()
{
    await _navigationService.Navigate<FirstViewModel>();
}

第二样本(发行)

第二样本 中,我首先调用另一个活动(StartActivity),然后转到MainActivity。这给了problems,因为MainViewModel不是用 RegisterAppStart<>调用的,而是用调用的。

一些代码示例(有关完整代码,请参阅链接)

代码语言:javascript
复制
public class App : MvvmCross.Core.ViewModels.MvxApplication
{
    public override void Initialize()
    {
        RegisterAppStart<StartViewModel>();
    }
}

StartViewModel:

代码语言:javascript
复制
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>();
    }
}

差异:

  • First ViewModel:RegisterAppStart<StartViewModel>();
  • 从导航服务调用:await _navigationService.Navigate<MainViewModel>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45629223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档