2014-02-18 3 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:FlyoutsControl.ItemTemplate> 
     <DataTemplate> 
     <ContentControl cal:View.Model="{Binding}" /> 
     </DataTemplate> 
    </controls:FlyoutsControl.ItemTemplate> 

을 :

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

바인딩을 추가 할 필요가 수정 얻으려면 FlyOut에서 ToString() 함수의 결과를 얻습니다. 기본값은 클래스의 유형 이름 (viewmodel)입니다. 그것을 무시하십시오.

필자는 위의 바인딩이 필요한 이유에 대해 설명 할 수 있지만 필자는 WPF/Caliburn/MVVM을 처음 접했을뿐입니다. 어쩌면 다른 누군가가 정교 할 수 있습니다. 그러나 이것이 당신이 나아갈 수 있다고 생각했습니다.

+0

감사합니다.이 또한 저에게 효과적이었습니다. – Frank

+0

MahApp 자신의 예가 잘못된 방향으로 인도합니다. – Robert