Wpf MvvmCross:另一视图内的视图(或与Caliburn微导体等效的视图)

Wpf MvvmCross:另一视图内的视图(或与Caliburn微导体等效的视图),wpf,xaml,mvvm,view,mvvmcross,Wpf,Xaml,Mvvm,View,Mvvmcross,一般来说,我对MvvmCross和mvvm模式还很陌生,所以我开始了一个小的学习项目,很快就遇到了一堵墙。我的应用程序基于一个MainView的思想,它包含一个标准的菜单和一个子MvxWpfView。此子视图应首先是一个简单的ReadMeView,但在用户输入时,它应切换到另一个视图(其中包含实际数据)。我已经找到了一些关于这个问题的文章,但没有一篇有效,或者我没能跟上。 我的设置: 核心库(.NET标准2.0) Wpf应用程序(.NET Core 3.1) 这是我的MainViewMode

一般来说,我对MvvmCross和mvvm模式还很陌生,所以我开始了一个小的学习项目,很快就遇到了一堵墙。我的应用程序基于一个MainView的思想,它包含一个标准的
菜单和一个子
MvxWpfView
。此子视图应首先是一个简单的ReadMeView,但在用户输入时,它应切换到另一个视图(其中包含实际数据)。我已经找到了一些关于这个问题的文章,但没有一篇有效,或者我没能跟上。
我的设置

  • 核心库(.NET标准2.0)
  • Wpf应用程序(.NET Core 3.1)
这是我的MainViewModel,仍在实施:

using MvvmCross.Commands;
using MvvmCross.ViewModels;

namespace puRGE.Core.ViewModels
{
    public class MainViewModel : MvxViewModel
    {
        #region Fields -------------------------------------------------------------------------------------
        private HomeViewModel m_homeViewModel = new HomeViewModel();
        #endregion ------------------------------------------------------------------------ Fields endregion


        #region Properties ---------------------------------------------------------------------------------
        public HomeViewModel Home {
            get => m_homeViewModel;
            set => SetProperty(ref m_homeViewModel, value);
        }
        #endregion -------------------------------------------------------------------- Properties endregion


        #region Constructors -------------------------------------------------------------------------------
        public MainViewModel() { }
        #endregion ------------------------------------------------------------------ Constructors endregion


        #region Public methods -----------------------------------------------------------------------------
        public override void Prepare()
        {
            Home = new HomeViewModel();
        }
        #endregion ---------------------------------------------------------------- Public methods endregion
    }
}
这是位于myMainView中的xaml部件(仍然是的一部分):

这也不行
Binding
s即使在
ViewModel
s
Prepare()
方法中设置了属性值get,也会停止这种工作。我猜这样调用视图会打破一些事件链或其他东西。

如何在主视图中放置视图?然后,这个孩子是否能够导航到另一个视图,反之亦然(遵循导航文档)?

编辑\u 011020:
一般的Mvvm方法到目前为止似乎不起作用。
编辑\u 02102020:

主页现在可以导航到其他视图模型并返回。仍然不知道如何在my MainView中包含此内容。

在您的
MainView.xaml中:


请记住通知您在
HomeViewModel中所做的更改:

public void ActivateModelAViewModel()
{
HomeViewModel=Mvx.IoCProvider.Resolve();
//在HomeViewModel属性中:
//RaisePropertyChanged(()=>HomeViewModel);
}
public void ActivateModelBViewModel()
{
HomeViewModel=Mvx.IoCProvider.Resolve();
//在HomeViewModel属性中:
//RaisePropertyChanged(()=>HomeViewModel);
}

我还发现,以下备选方案也能起到作用(第一个除外,已注释掉):


2.ContentPresenter-内容
3.ContentControl-DataContext
4.内容控制-内容
5.UserControl-DataContext
6.用户控制-内容
7.MvxWpfView-数据上下文
8.MvxWpfView-内容
有些只是从其他的继承而来,例如,
MvxWpfView:UserControl
UserControl:ContentControl
,但不确定
ContentPresenter
,因为它本身就是
ContentPresenter


在我的例子中,
ActiveViewModel
WorkWeekViewModel
WorkViewModel
MvxViewModel
的实例
WorkWeekView
WorkView
MvxWpfView
的实例,请使用绑定到
Home
属性的
ContentControl
,然后将
Home
设置为要在
ContentControl
中显示视图的任何视图模型,就像这样
?!已经试过了。。。它不起作用。它仅在窗口的白色部分显示:MyProjectName.Core.ViewModels.HomeViewModel。这是因为您尚未为视图模型指定
DataTemplate
。指定
DataTemplate
是什么意思?
<Menu>
    <!-- Some MenuItems -->
</Menu>
<UserControl DataContext="{Binding Home, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<local:HomeView/>