2009-12-16 6 views
0

내 ViewModel의 불리언 속성에 가시성을 바인딩하여 기본 창에 오버레이로 표시하는 몇 가지보기가 있습니다.팝업 대 가시성 전환

<Style x:Key="NotificationsView" TargetType="UserControl"> 
    <!-- snipped -->   
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsNotificationsViewVisible}" Value="True"> 
      <Setter Property="Visibility" Value="Visible"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsNotificationsViewVisible}" Value="False"> 
      <Setter Property="Visibility" Value="Collapsed"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

나는 팝업을 사용하는 것이 바람직 할 수 있는지 궁금 :

 <Grid> 
      <vw:MainContentView/> 

      <!-- Overlays (normally invisible) --> 
      <vw:NotificationsView/> 

     </Grid> 

'NotificationsView'은 다음과 같습니다 스타일을 가지고

메인 윈도우는 다음과 같이 보입니다 보기의 가시성을 직접 전환하지 않고 'IsOpen'속성을 ViewModel의 'IsNotificationViewVisible'속성에 바인딩하면됩니다.

 <Grid> 
      <vw:MainContentView /> 

      <!-- Popups (normally invisible) -->    
      <Popup IsOpen="{Binding IsNotificationsViewVisible}"> 
       <vw:NotificationItemsView/> 
      </Popup> 

     </Grid> 

한 가지 방법을 다른 방법 (메모리 사용 또는 다른 방식)보다 사용하려는 이유가 있습니까? 두 가지 접근법 모두 잘 작동하는 것 같습니다. Popup에는 몇 가지 무료 애니메이션이 있지만 다른 점은 똑같습니다.

답변

1

이미 존재하는 창에 콘텐츠를 표시하려면 가시성 접근 방식을 사용해야합니다. Popup은 기본 창의 요소 위치를 기반으로 초기 위치를 지정할 수있는 미니 창 역할을합니다. 즉, 기본 창 경계를 벗어날 수 있으며 기본 창을 이동할 때 주변으로 이동하지 않습니다. 또한 창에있는 다른 요소의 레이아웃에는 영향을주지 않습니다. 나는 또한 이것과 관련된 약간의 오버 헤드를 가지고 있다고 상상하지만, 나는 정확한 숫자를 실행하지 않았다.

보너스로 a converter to make Visibility binding easier을 사용할 수 있습니다.

+0

충분히 공정함 - 나는 팝업 창이 메인 윈도우에서 움직이지 않는다는 것을 알아 채지 못했습니다! 이 동작은 꽤 많은 것을 결정합니다. 나는 visiblity 접근법을 사용할 것입니다. 감사! – user158485