2014-02-18 35 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