2009-07-22 4 views
0

Ich habe eine Anwendung auf Prism basiert.Warum sollte ItemsControl eine Ansicht anzeigen, aber ContentControl zeigt nichts?

Das ist mein Shell:

<Window x:Class="AvarioCRM3.ShellV2" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:cal="http://www.codeplex.com/CompositeWPF" > 

    <DockPanel LastChildFill="True"> 
     <Border 
      Padding="10" 
      DockPanel.Dock="Top" 
      Background="#ddd"> 
      <DockPanel> 
       <ItemsControl 
        Name="MainNavigationPanel" 
        cal:RegionManager.RegionName="MainNavigationPanel" 
        DockPanel.Dock="Top"/> 

      </DockPanel> 
     </Border> 
    </DockPanel> 

</Window> 

In meinem MenuModule ich einen Blick in die Region hinzufügen, und es zeigt, fein:

public void Initialize() 
{ 
    MainNavigationPresenter mainNavigationPresenter = this.container.Resolve<MainNavigationPresenter>(); 
    IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"]; 
    mainRegion.Add(new TestView()); 
} 

Das Problem ist: Ich will nicht ein ItemsControl in meiner Shell möchte ich eine ContentControl, aber wenn ich ein ContentControl verwende, zeigt es nichts.

Warum sollte ItemsControl meine Ansichten zeigen und ContentControl nichts anzeigen?

Antwort

1

Könnte das sein, weil ein ContentControl nur ein einzelnes Kind anzeigt, während ein ItemsControl mehrere Kinder hat?

Ich habe nicht mit Prism gearbeitet, aber die API schlägt vor, dass eine IRegion mehrere Kinder haben soll. Wenn Sie ein Contentcontrol verwenden, dann ist es ein wenig zweideutig, was passiert, wenn ich folgendes tun:

IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"]; 
mainRegion.Add(new TestView()); 
mainRegion.Add(new SecondTestView()); 
+0

Der TestView wird angezeigt, dann wird der SecondTestView hinzugefügt, und dann kann eine Ausnahme auftreten. Wenn nicht, wäre das Verhalten, dass Sie die SecondTestView nie sehen würden. – Rick

0

ich bemerkt, dass Sie dies in initialisieren tun. Könnte zu früh sein? Haben Sie versucht, die Registrierung zu verwenden, anstatt Ihre Ansicht zu injizieren, um zu sehen, ob sich etwas geändert hat?

Dies wird Ihr Problem nicht lösen, aber es wird beweisen, dass das Problem versucht, etwas hinzuzufügen, bevor Ihre Region tatsächlich verfügbar ist. RegisterViewWithRegion verzögert die Erstellung und Anzeige der Ansicht, bis die Region verfügbar ist.

1

Im Gegensatz zu ItemsControl mit einem ContentControl müssen Sie die Ansicht auch aktivieren, nachdem Sie sie hinzugefügt haben, um sie sichtbar zu machen.

MainNavigationPresenter mainNavigationPresenter = this.container.Resolve<MainNavigationPresenter>(); 
IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"]; 
TestView view = new TestView() 
mainRegion.Add(view); 
mainRegion.Activate(view); 
Verwandte Themen