C# WPF 棱镜页面连接

C# WPF Prism Page connect

我尝试使用 WPF 应用程序 .net 框架和 Prism 框架将页面连接到我的主 window。

我在这里错过了什么?

App.xaml:

<prism:PrismApplication x:Class="Aplicatie2._0.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"
             xmlns:local="clr-namespace:Aplicatie2._0">
        <Application.Resources>

        </Application.Resources>
</prism:PrismApplication>

App.xaml.cs:

using Prism.Modularity;
using Prism.Ioc;
using System.Windows;
using System.ComponentModel;
using Prism.Unity;
using Aplicatie2._0.View;

namespace Aplicatie2._0
{
        public partial class App  : PrismApplication
        {
                protected override Window CreateShell()
                {
                        return Container.Resolve<MainPage>();
                }

                protected override void RegisterTypes(IContainerRegistry containerRegistry)
                {
                        containerRegistry.RegisterForNavigation<MainPage>("MainPage");
                        containerRegistry.RegisterForNavigation<FirstQ>("FirstQ");
                }

        }
}

ViewModel->MainPageViewModel:

using Prism.Mvvm;
using Prism.Navigation;
using Prism.Commands;
using System.Windows.Input;
using System.Windows;
using Prism.Regions;
using Aplicatie2._0.View;

namespace Aplicatie2._0.ViewModel
{
        class MainPageViewModel : BindableBase
        {
                private string _Title = "Test";
                private IRegionManager _regionManager;

                public string Title
                {
                        get
                        {
                                return _Title;
                        }
                        set
                        {
                                SetProperty(ref _Title, value);
                        }
                }
                public DelegateCommand PressButton { get; private set; }
                public MainPageViewModel(IRegionManager regionManager)
                {
                        PressButton = new DelegateCommand(Execute);
                        _regionManager = regionManager;
                }

                public void Execute()
                {
                        MessageBox.Show("TEST");

                        _regionManager.RequestNavigate("MainContent", "FirstQ");
                        
                }
        }
}

查看->主页:

<Window x:Class="Aplicatie2._0.View.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:VM="clr-namespace:Aplicatie2._0.ViewModel"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:local="clr-namespace:Aplicatie2._0.View"
        prism:ViewModelLocator.AutoWireViewModel="True"
        
        mc:Ignorable="d"
        Title="{Binding Title}" Height="450" Width="800">
        <Window.DataContext>
                <VM:MainPageViewModel/>
        </Window.DataContext>
        <Grid>
                <ContentControl prism:RegionManager.RegionName="MainContent"/>
                <Button Content="Button" CommandParameter="FirstQ" HorizontalAlignment="Left" Margin="151,54,0,0" VerticalAlignment="Top" Width="75" Command="{Binding PressButton}"/>

        </Grid>
</Window>

查看->第一Q

<Page x:Class="Aplicatie2._0.View.FirstQ"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:Aplicatie2._0.View"
      Background="White"
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      Title="FirstQ">

    <Grid>
                <TextBlock HorizontalAlignment="Left" Margin="249,108,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>

        </Grid>
</Page>

我的 window 没有启动。如果我像这样制作 MainPageViewModel 构造函数:

public MainPageViewModel() 

window 已开放。

如果我没有:

 <Window.DataContext>
                <VM:MainPageViewModel/>
        </Window.DataContext>

我的绑定不起作用,不管我有没有

prism:ViewModelLocator.AutoWireViewModel="True"...

我错过了什么?

你要么必须

  1. 将命名空间与默认约定对齐(MyApp.Views 用于视图,MyApp.ViewModels 用于视图模型)
  2. 一起注册视图和视图模型
  3. 为link视图和视图模型类型创建您自己的约定

以便 ViewModelLocator 可以完成他的工作。

根据您发布的代码,Aplicatie2._0.View.MainPage 应为 Aplicatie2._0.Views.MainPageAplicatie2._0.ViewModel.MainPageViewModel 应为 Aplicatie2._0.ViewModels.MainPageViewModel