繁体   English   中英

MVVMCross 如何在视图中显示视图

[英]MVVMCross How to display a view within a view

我是 MVVMCross package 和 C# 的新手。 我花了一天的大部分时间试图找出我不理解的内容,阅读有关演示者和导航等的文档以试图理解,但我错过了一些东西。

我最初创建了一个未实现 MVVM 的 WPF 应用程序,现在我想转换,但我在这部分苦苦挣扎。 我想要一个主菜单,它是“MainWindow”中网格的一部分,例如 shell,其中页面的其余部分(和网格列 2)用于显示嵌套视图。

最终,我只是想在原始 WPF 应用程序中重现相同的分层控件。 在该应用程序中有一个内容控件,它占据了大部分表单,其内容属性设置为不同的表单,具体取决于用户的选择。

主窗口.xaml.cs

public partial class MainWindow : MvxWindow
{
    public MainWindow(IMvxNavigationService navService)
    {
        InitializeComponent();
        DataContext = new MainViewModel(navService);

        //content.Content = new AdminMenuView();

    }
}

主视图模型.cs

    private MvxViewModel _nextMenuContent;

    public MainViewModel(IMvxNavigationService navService)
    {
        _navService = navService;            
        MoveMenuCommand = new MvxCommand(MoveMenu);
        ChildViewModel = new AdminMenuViewModel();
        GoToAdminMenu = new MvxCommand(SelectAdminMenu);

    }

主视图.xaml

<ContentControl Content="{Binding ChildViewModel}"/>  

***网格和列都工作正常

MainView.xaml.cs

public partial class MainView : MvxWpfView
{
    public MainView()
    {
        InitializeComponent();
        
    }
}

AdminMenuModel.cs

public class AdminMenuViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navService;

    public AdminMenuViewModel()
    {
        Initialize();
        
    }

    public override void Prepare()
    {
        base.Prepare();
    }

    public override async Task Initialize()
    {
        await base.Initialize();
    }



}

AdminMenuModel.xaml.cs

    public partial class AdminMenuView : MvxWpfView
{
    public AdminMenuView()
    {
        InitializeComponent();
    }

    public new AdminMenuViewModel ViewModel
    {
        get { return base.ViewModel as AdminMenuViewModel; }
        set { base.ViewModel = value; }
    }

}

当我调用它运行的 AdminMenuViewModel 时,如果我将“ChildViewModel”绑定到内容控件的 DataContext 属性,我在内容控件中得到的只是一个空白屏幕,如果我将它绑定到 AdminMenuViewModel 的路径字符串内容属性。

您必须将 MainViewModel 设置为主要 window 的 DataContext

public MainWindow(IMvxNavigationService navService)
{
    DataContext = new MainViewModel(navService);
    InitializeComponent();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM