2014-02-18 10 views
5

Ich versuche, ein Flyout in WPF mit Mahapps und caliburn.micro zu zeigen, leider ist die Ansicht für das Flyout nicht gelöst, und alles, was ich bekomme, ist der Typname der Ansichtsmodell im Flyout angezeigt.Mahapps Flyout erscheint nicht mit und caliburn.micro

Ich brauche das um das Flyout anzuzeigen, basierend auf dem ActiveItem in der Shell, zum Beispiel das Firmasuche Flyout unterscheidet sich von der Kontaktsuche Flyout.

Irgendwelche Ideen, wie ich das schaffen kann.

public void ShowSearchFlyout() 
{ 
    var supportsSearch = ActiveItem as ISupportSearch; 
    if (supportsSearch != null) 
    { 
     if (!Flyouts.Contains(supportsSearch.SearchFlyout)) 
     { 
      Flyouts.Add(supportsSearch.SearchFlyout); 
     } 
     supportsSearch.SearchFlyout.IsOpen = true; 
    } 
} 
<controls:MetroWindow.Flyouts> 
    <controls:FlyoutsControl ItemsSource="{Binding Flyouts}"> 
     <controls:FlyoutsControl.ItemContainerStyle> 
      <Style BasedOn="{StaticResource {x:Type controls:Flyout}}" TargetType="{x:Type controls:Flyout}"> 
       <Setter Property="Header" Value="{Binding Header}" /> 
       <Setter Property="IsOpen" Value="{Binding IsOpen}" /> 
       <Setter Property="Position" Value="{Binding Position}" /> 
      </Style> 
     </controls:FlyoutsControl.ItemContainerStyle> 
    </controls:FlyoutsControl> 
</controls:MetroWindow.Flyouts> 

Antwort

10

Die folgenden für mich gearbeitet:

<controls:MetroWindow.Flyouts> 
    <controls:FlyoutsControl ItemsSource="{Binding Flyouts}"> 
    <controls:FlyoutsControl.ItemTemplate> 
     <DataTemplate> 
     <ContentControl cal:View.Model="{Binding}" /> 
     </DataTemplate> 
    </controls:FlyoutsControl.ItemTemplate> 
    <controls:FlyoutsControl.ItemContainerStyle> 
     <Style BasedOn="{StaticResource {x:Type controls:Flyout}}" TargetType="{x:Type controls:Flyout}"> 
     <Setter Property="Header" Value="{Binding Header}" /> 
     <Setter Property="IsOpen" Value="{Binding IsOpen}" /> 
     <Setter Property="Position" Value="{Binding Position}" /> 
     </Style> 
    </controls:FlyoutsControl.ItemContainerStyle> 
    </controls:FlyoutsControl> 
</controls:MetroWindow.Flyouts> 

Um die Bindungen zu erhalten korrigieren Sie hinzufügen:

<controls:FlyoutsControl.ItemTemplate> 
     <DataTemplate> 
     <ContentControl cal:View.Model="{Binding}" /> 
     </DataTemplate> 
    </controls:FlyoutsControl.ItemTemplate> 

Wenn Sie nicht tun, werden Sie Holen Sie das Ergebnis der Funktion ToString() im FlyOut. Der Standardwert ist der Typname der Klasse (das Viewmodel). Überschreibe es.

Ich wünschte, ich könnte eine gute Erklärung geben, warum die obige Bindung benötigt wird, aber ich bin ziemlich neu in WPF/Caliburn/MVVM. Vielleicht kann jemand anders es ausarbeiten. Aber ich dachte, das könnte dir weiterhelfen.

+0

Danke, das hat auch für mich funktioniert. – Frank

+0

Funktioniert immer noch, schade MahApps eigenes Beispiel lenkt dich in die falsche Richtung – Robert