KeyNotFoundException:找不到WCFManager.ViewModels.SettingsViewModel的视图

时间:2018-08-03 10:31:39

标签: android navigation mvvmcross

我尝试通过使用MainViewModel.cs中的以下内容在MvvmCross中导航

public IMvxAsyncCommand GoToSettingsPage => new MvxAsyncCommand(() => _navService.Navigate<SettingsViewModel>());

我的SettingsViewModel.cs看起来像这样

public class SettingsViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navService;

    public SettingsViewModel(IMvxNavigationService _navService)
    {
        this._navService = _navService;
    }

    public override Task Initialize() => base.Initialize();

    public IMvxAsyncCommand GoToMainPage => new MvxAsyncCommand(() => _navService.Navigate<MainViewModel>());
}

这是我的SettingsView.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:local="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<Button
    android:text="Button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/button1"
    local:MvxBind="Click GoToMainPage" />
</LinearLayout>

如果我启动我的应用程序并立即加载到SettingsViewModel中而不是MainViewModel中,它就可以正常工作。导航无法进行,但我总是收到以下消息:

System.Collections.Generic.KeyNotFoundException: Could not find view for WCFManager.ViewModels.SettingsViewModel

我知道,它无法通过KeyNotFoundException找到关联的视图,但是我找不到任何手动将其关联的方法,并且根据类似的问题,它会通过名称自动将其关联。不幸的是,这个名称已经正确,当我像这样从头开始加载视图时,便可以找到视图

[Activity]
public class MainView : MvxActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.MainView);
    }
}

1 个答案:

答案 0 :(得分:0)

通过写自己的问题,我意识到自己是多么盲目。 每个视图都只有一个.axml文件是不够的,您还需要为其提供一个类。我只是复制了在问题中显示的MainView类,而是编写了SettingsView。效果很好。

[Activity]
public class SettingsView : MvxActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.SettingsView);
    }
}