Переключатель Popup vs. Visibility - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть пара представлений, которые я отображаю в качестве оверлеев в главном окне, связывая видимость с логическим свойством в моей 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 поставляется с парой бесплатных анимаций, но в остальном выглядит одинаково.

1 Ответ

1 голос
/ 16 декабря 2009

Если вы отображаете контент в уже существующем окне, вам, вероятно, следует использовать подход Visibility. Всплывающее окно действует как мини-окно, которое может изначально позиционировать себя в зависимости от расположения элементов в главном окне. Это означает, что он может выходить за пределы основного окна и не будет перемещаться при перемещении главного окна. Это также не влияет на расположение других элементов в окне. Я предполагаю, что это также связано с некоторыми накладными расходами, но я не указал точные цифры.

В качестве бонуса я добавлю предложение: вы можете использовать конвертер, чтобы упростить привязку Visibility .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...