我已经观看过网络研讨会" MVVM简化了Prism" (Brian Lagunas)。 我按照他的例子创建了一个带有菜单的主窗口 项目。当操作员选择我打开视图的项目时。应用 编译并开始但当我选择一个项目时没有任何事情发生。 我已经设置了一些断点来控制要打开的视图 istantiated,以控制正确的uri和正确的密钥使用 扩展RegisterTypeForNavigation。一切看似正确。我注意到了这一点 当我关闭MainWindow应用程序时从菜单中选择一个项目 不要自动停止。我复制一些代码字符串给你更多 细节...
主窗口xml(MenuPrincipale.xml)
<Window x:Class="PBEdPallets.Views.MenuPrincipale"
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:local="clr-namespace:PBEdPallets.Views"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
mc:Ignorable="d"
Title="Menu Principale:" Height="600" Width="850">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0" x:Name="MenuItems" Height="19" Margin="5,5,5,0" VerticalAlignment="Top">
<MenuItem Header="Anagrafiche">
<MenuItem Header="Materiali" Command="{Binding NavigateCommand}" CommandParameter="Editor_AnaMateriali"/>
<MenuItem Header="Sottocataste" Command="{Binding NavigateCommand}" CommandParameter="Editor_AnaSottocataste"/>
<MenuItem Header="Tipi livelli pile" Command="{Binding NavigateCommand}" CommandParameter="Test"/>
</MenuItem>
</Menu>
<ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" />
</Grid>
** Bootstrapper.cs **
using Prism.Unity;
using Microsoft.Practices.Unity;
using PBEdPallets.Views;
using System.Windows;
namespace PBEdPallets
{
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
//Importo la finestra di avvio.
return Container.Resolve<MenuPrincipale>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
//Container.RegisterType(typeof(object), typeof(Editor_AnaMateriali), "Editor_AnaMateriali");
//Container.RegisterType(typeof(object), typeof(Editor_AnaSottocataste), "Editor_AnaSottocataste");
Container.RegisterTypeForNavigation<Editor_AnaMateriali>("Editor_AnaMateriali");
Container.RegisterTypeForNavigation<Editor_AnaSottocataste>("Editor_AnaSottocataste");
Container.RegisterTypeForNavigation<Test>("Test");
}
}
public static class UnityExtensions
{
public static void RegisterTypeForNavigation<T>(this IUnityContainer container, string name)
{
container.RegisterType(typeof(object), typeof(T), name);
}
}
}
** MenuPrinciapaleViewModel **
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
namespace PBEdPallets.ViewModels
{
public class MenuPrincipaleViewModel: BindableBase
{
private readonly IRegionManager _regionManager;
public DelegateCommand<string> NavigateCommand { get; set; }
#region Costruttore
public MenuPrincipaleViewModel(IRegionManager regionalManager)
{
_regionManager = regionalManager;
//Definisco l'istanza di NavigateCommand.
NavigateCommand = new DelegateCommand<string>(Navigate);
}
#endregion Costruttore
#region Private Methods
private void Navigate(string uri)
{
try
{
//ContentRegion è il nome assegnato nel tag ContentControl
_regionManager.RequestNavigate("ContentRegion", new Uri(uri, UriKind.Relative));
}
catch (Exception)
{
throw;
}
}
#endregion Private Methods
}
}