Wpf MvvmCross:另一视图内的视图(或与Caliburn微导体等效的视图)
一般来说,我对MvvmCross和mvvm模式还很陌生,所以我开始了一个小的学习项目,很快就遇到了一堵墙。我的应用程序基于一个MainView的思想,它包含一个标准的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
菜单和一个子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
sPrepare()
方法中设置了属性值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/>