2009-12-16 78 views
0

我有幾個視圖,通過將可見性綁定到ViewModel中的布爾屬性,在主窗口上顯示爲疊加層。Popup vs. Visibility toggle

主窗口看起來是這樣的:

 <Grid> 
      <vw:MainContentView/> 

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

     </Grid> 

的「NotificationsView」的風格,看起來像這樣:

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

我不知道這是否會是最好使用一個彈出將'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

夠公平 - 我沒有注意到彈出窗口不會隨主窗口移動!這種行爲非常重要 - 我將使用可見性方法。謝謝! – user158485