2014-02-18 68 views
5

我試圖表明使用mahapps和caliburn.micro在WPF中彈出,不幸的是,在彈出的觀點並沒有得到解決,而我得到的是的類型名稱彈出窗口中顯示的查看模型。Mahapps彈出不會出現和caliburn.micro

我需要在此基礎上,顯示彈出是ActiveItem在外殼中,例如該公司搜索彈出是到接觸搜索彈出不同。

任何想法,我怎樣才能使這項工作。

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> 

回答

10

以下爲我工作:

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

爲了獲得綁定糾正你必須添加:

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

如果你不這樣做,你會在FlyOut中獲取函數ToString()的結果。默認值是類的類型名稱(viewmodel)。嘗試覆蓋它。

我嘩嘩我可以給一個很好的解釋,都需要上面的結合爲什麼,但我是相當新的WPF /卡利/ MVVM。也許別人可以詳細說明。不過,我認爲這可能會幫助你繼續前進。

+0

謝謝,這也適用於我。 – Frank

+0

仍然有用,太糟糕了MahApp自己的例子將你引向錯誤的方向 – Robert