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"...
我错过了什么?
你要么必须
- 将命名空间与默认约定对齐(
MyApp.Views
用于视图,MyApp.ViewModels
用于视图模型)
- 一起注册视图和视图模型
- 为link视图和视图模型类型创建您自己的约定
以便 ViewModelLocator
可以完成他的工作。
根据您发布的代码,Aplicatie2._0.View.MainPage
应为 Aplicatie2._0.Views.MainPage
,Aplicatie2._0.ViewModel.MainPageViewModel
应为 Aplicatie2._0.ViewModels.MainPageViewModel
。
我尝试使用 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"...
我错过了什么?
你要么必须
- 将命名空间与默认约定对齐(
MyApp.Views
用于视图,MyApp.ViewModels
用于视图模型) - 一起注册视图和视图模型
- 为link视图和视图模型类型创建您自己的约定
以便 ViewModelLocator
可以完成他的工作。
根据您发布的代码,Aplicatie2._0.View.MainPage
应为 Aplicatie2._0.Views.MainPage
,Aplicatie2._0.ViewModel.MainPageViewModel
应为 Aplicatie2._0.ViewModels.MainPageViewModel
。