2016-08-22 6 views
1

Ich arbeite an einer Anwendung für mein Büro mit WPF mit Prism, und ich habe einen Roadblock getroffen. Ich fand ein Webinar, das von Brian Lagunas (einem der Entwickler von Prism) gehostet wurde, der einige der Dinge machte, die ich in dieser App machen musste, also habe ich im Grunde genommen Namespaces usw. angepasst, um sie an meine App anzupassen.Set-Eigenschaft 'Prism.Regions.RegionManager.RegionName' hat eine Ausnahme ausgelöst

Die Lösung wird kompiliert, aber es löst eine Ausnahme aus, wenn ich versuche, mit dem ContentControl mit Prism: RegionManager.RegionName zu navigieren.

Die Lösung hat 2 Projekte. Das erste Projekt nennt das MainWindow des zweiten Projekts. Mein Code ist unten.

Projekt 1 - Mainwindow

namespace AdjusterToolV2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void btnLetters_Click(object sender, RoutedEventArgs e) 
     { 
      URLetters.MainWindow frm1 = new URLetters.MainWindow(); 
      frm1.Show(); 
     } 
    } 
} 

Prism Bootstrapper

using Prism.Unity; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using Microsoft.Practices.Unity; 
using URLetters.Views; 

namespace URLetters 
{ 
    public class Bootstrapper : UnityBootstrapper 
    { 

     protected override DependencyObject CreateShell() 
     { 
      return Container.Resolve<MainWindow>(); 
     } 

     protected override void InitializeShell() 
     { 
      Application.Current.MainWindow.Show(); 
     } 

     protected override void ConfigureContainer() 
     { 
      base.ConfigureContainer(); 

      Container.RegisterType(typeof(object), typeof(PHLtrWithEvidenceView), "PHLtrWithEvidenceView"); 
     } 
    } 
} 

XAML für Projekt 2 Haupt-Seite (Code hinter leer)

<Controls:MetroWindow x:Class="URLetters.MainWindow" 
         xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
         xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 
         xmlns:d= "http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
         xmlns:prism="http://prismlibrary.com/" 
         prism:ViewModelLocator.AutoWireViewModel="True" 
         xmlns:local="clr-namespace:URLetters" 
         mc:Ignorable="d" 

         Title="Unresolved Liability Letters" 
         Height="500" 
         Width="700" 
         Icon="../Resources/GEICO.ico" 
         ResizeMode="NoResize" 
         WindowStartupLocation="CenterScreen"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="120"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <DockPanel Grid.Column="0" Background="#154995" HorizontalAlignment="Left" LastChildFill="False" Width="120"> 
      <StackPanel Grid.Column="0"> 
       <Button x:Name="btn48hrWithEvidence" 
         Command="{Binding NavigateCommand}" 
         CommandParameter="PHLtrWithEvidenceView" 
         x:FieldModifier="public" 
         Height="40" 
         Width="100" 
         Margin="10,10,0,0" 
         ToolTip="Letter to the PH with a 48 hour contact time limit. Used when evidence has been provided by the claimant" > 
        <TextBlock FontSize="11" Text="48 Hour - PH With Evidence" TextWrapping="Wrap" TextAlignment="Center" /> 
       </Button> 
       <Button x:Name="btn48hrNoEvidence" 
         Height="40" 
         Width="100" 
         Margin="10,10,0,0" 
         ToolTip="Letter to the PH with a 48 hour contact time limit. Used when there is no evidence provided by the claimant" > 
        <TextBlock FontSize="11" Text="48 Hour - PH With No Evidence" TextWrapping="Wrap" TextAlignment="Center" /> 
       </Button> 
       <Button x:Name="btnNoCtcPH" 
         Height="40" 
         Width="100" 
         Margin="10,10,0,0" 
         ToolTip="Letter to the PH advising them that we have reached an AT FAULT liability decision based on the evidence provided." > 
        <TextBlock FontSize="11" Text="No Contact - PH Liability Decision" TextWrapping="Wrap" TextAlignment="Center" /> 
       </Button> 
       <Button x:Name="btnNoCtcPHLiabDenial" 
         Height="40" 
         Width="100" 
         Margin="10,10,0,0" 
         ToolTip="Letter to the PH advising them that we have denied liability because we have no evidence to support the PH involvement" > 
        <TextBlock FontSize="11" Text="No Contact - PH Liability Denial" TextWrapping="Wrap" TextAlignment="Center" /> 
       </Button> 
       <Button x:Name="btnNoCtcCLMTLiabDenial" 
         Height="40" 
         Width="100" 
         Margin="10,10,0,0" 
         ToolTip="Letter to the CLAIMANT advising that we have denied liability because we have no evidence to support the PH involvement" > 
        <TextBlock FontSize="11" Text="No Contact - CLMT Liability Denial" TextWrapping="Wrap" TextAlignment="Center" /> 
       </Button> 
      </StackPanel> 
     </DockPanel> 
     <DockPanel x:Name="ContentRegionName" Grid.Column="1"> 
     <ContentControl prism:RegionManager.RegionName="ContentRegion"/> 
     </DockPanel> 

    </Grid> 
</Controls:MetroWindow> 

Ansichtsmodell für Projekt 2 Hauptfenster

using Prism.Mvvm; 
using Prism.Regions; 
using Prism.Commands; 


namespace URLetters.ViewModels 
{ 
    public class MainWindowViewModel : BindableBase 
    { 
     private readonly IRegionManager _regionManager; 

     public DelegateCommand<string> NavigateCommand { get; set; } 

     public MainWindowViewModel(IRegionManager regionManager) 
     { 
      _regionManager = regionManager; 

      NavigateCommand = new DelegateCommand<string>(Navigate); 
     } 

     private void Navigate(string uri) 
     { 
      _regionManager.RequestNavigate("ContentRegion", uri); 
     } 

    } 
} 

Es die Ausnahme in der XAML-Datei auf dieser Linie wirft:

<ContentControl prism:RegionManager.RegionName="ContentRegion"/> 

Ausnahme lautet: „Exception geworfen: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll

Zusätzliche Informationen: 'Set property' Prism.Regions.RegionManager.RegionName 'hat eine Ausnahme ausgelöst.' Zeilennummer '69' und Zeilenposition '14'. "

Dies passiert, wenn ich auf die Schaltfläche btnLetters klicke. Das URLetters MainWindow wird nicht geöffnet und dann wird die Ausnahme ausgelöst. Ich habe mir den Code nochmals angesehen und ihn mit den Beispielen im Webinar verglichen. Ich kann nicht herausfinden, warum die Ausnahme ausgelöst wird. Hilfe wäre sehr willkommen.

+0

Oh ja, fast vergessen. Ich habe folgende NuGet Pakete installled: Prism Core-6.2 Prism Unity 6.2 Prism für WPF 6.2 MahApps.Metro 1.2.4 Unity 4.0.1 –

Antwort

3

Es sieht nicht so aus, als hätten Sie Ihre Anwendung richtig eingerichtet. Ihr Bootstrapper sollte die Klasse sein, die für die Anzeige Ihres MainWindows verantwortlich ist. Sie sollten kein StartupUri in Ihrer App.xaml haben. Es ist offensichtlich etwas nicht in Ordnung mit wie Sie Ihr Projekt eingerichtet haben, aber es gibt nicht genug Informationen in Ihrem Beitrag für mich, um eine definitive Antwort zu geben. Plus, mit 2 MainWindows ist verwirrend mich :)

Herunterladen und Installieren der Prism Template Pack: https://visualstudiogallery.msdn.microsoft.com/e7b6bde2-ba59-43dd-9d14-58409940ffa0

dann eine neue Prism Unity App für WPF erstellen. Es wird Ihre Bewerbung für Sie ordnungsgemäß ausstellen. Dann fange einfach an, deine Views und ViewModels hinzuzufügen

+0

Ja, das ist ziemlich viel, was ich tat. Bis auf einen Teil des Boilerplate-Codes überschreibe ich den XAML mit der neuen Vorlage und bereinige einige meiner Grids. Ich werde dich wissen lassen, wie es sich entwickelt. –

Verwandte Themen