2009-07-22 2 views
0

У меня есть приложение, основанное на Призме.Почему ItemsControl показывает представление, но ContentControl ничего не показывает?

Это моя оболочка:

<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> 

В моем MenuModule добавить вид в регион, и это показывает штраф:

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

Проблемы: Я не хочу, ItemsControl в моей оболочке, я хочу ContentControl, но когда я использую ContentControl, он ничего не показывает.

Почему ItemsControl показывает мои взгляды, а ContentControl ничего не показывает?

ответ

1

Может ли это быть из-за того, что ContentControl отображает только одного ребенка, тогда как ItemControl имеет несколько дочерних элементов?

Я работал с Prism, но API предполагает, что у IRegion ожидается несколько детей. Если вы используете ContentControl тогда это немного неоднозначным, что происходит, когда я делаю следующее:

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

Будет показан TestView, затем будет добавлен SecondTestView, после чего может быть поднято исключение. Если нет, то поведение будет состоять в том, что вы никогда не увидите SecondTestView. – Rick

0

Я заметил, что вы делаете это в Initialize. Может быть, слишком рано? Вы пробовали использовать регистрацию, а не вставлять свое мнение, чтобы увидеть, изменилось ли это что-нибудь?

regionManager.RegisterViewWithRegion("MainNavigationPanel", typeof(TestView)); 

Это не решит проблему, однако это будет доказать, что проблема пытается добавить что-то прежде, чем ваш регион на самом деле имеется. RegisterViewWithRegion задерживает создание и отображение представления до тех пор, пока регион не будет доступен.

1

В отличие от ItemsControl с ContentControl, вам также необходимо активировать представление, как только вы его добавили, чтобы сделать его видимым.

MainNavigationPresenter mainNavigationPresenter = this.container.Resolve<MainNavigationPresenter>(); 
IRegion mainRegion = this.regionManager.Regions["MainNavigationPanel"]; 
TestView view = new TestView() 
mainRegion.Add(view); 
mainRegion.Activate(view); 
Смежные вопросы