У меня есть пара представлений, которые я отображаю в качестве оверлеев в главном окне, связывая видимость с логическим свойством в моей ViewModel.
Главное окно выглядит примерно так:
<Grid>
<vw:MainContentView/>
<!-- Overlays (normally invisible) -->
<vw:NotificationsView/>
</Grid>
У NotificationView есть стиль, который выглядит следующим образом:
<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, связанным со свойством IsNotificationViewVisible в ViewModel, а не переключать видимость представления напрямую:
<Grid>
<vw:MainContentView />
<!-- Popups (normally invisible) -->
<Popup IsOpen="{Binding IsNotificationsViewVisible}">
<vw:NotificationItemsView/>
</Popup>
</Grid>
Есть ли причины, по которым я хотел бы использовать один подход поверх другого (использование памяти или иное)? Оба подхода, кажется, работают просто отлично - Popup поставляется с парой бесплатных анимаций, но в остальном выглядит одинаково.