PRISM WPF Пользовательский запрос взаимодействия - элементы управления динамического просмотра не отображаются правильно - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с всплывающими окнами пользовательских запросов взаимодействия Prism / WPF.Всплывающее окно корректно отображается при первом запросе, но каждое следующее всплывающее окно использует одно и то же представление.Это приводит к тому, что TextBlock контролирует конкатенацию текста, полосы прокрутки не видны, динамические данные в элементах ItemsControl не видны, всплывающее окно имеет неправильный размер и т. Д. Можно ли принудительно создавать новое всплывающее окно при каждом новом взаимодействиизапросить или обновить все элементы управления во всплывающем окне?

Чтобы показать всплывающее окно, я использую стандартный код из документации PRISM, например, всплывающее окно создается как:

PopUpViewModel displayData = reportCreator.GetReport();
this.CustomConfirmationRequest.Raise(displayData, res => { 
 if (res.Confirmed)  
 { ... }
});

, где PopUpViewModel наследует Confirmation, IInteractionRequestAware

XAML:

<prism:InteractionRequestTrigger SourceObject="{Binding CustomConfirmationRequest, Mode=OneWay}">
            <prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStartupLocation="CenterScreen"  >
                <prism:PopupWindowAction.WindowContent>
                    <popups:SoPopUp/>
                </prism:PopupWindowAction.WindowContent>
            </prism:PopupWindowAction>
        </prism:InteractionRequestTrigger>

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вместо

<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStartupLocation="CenterScreen">
  <prism:PopupWindowAction.WindowContent>
    <popups:SoPopUp/>
  </prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>

вы можете использовать

<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStartupLocation="CenterScreen" WindowContentType = "{x:Type popups:SoPopUp}"/>

Когда вы указываете WindowContent, экземпляр SoPopUp создается один раз при загрузке этого xaml.Затем он используется повторно каждый раз, когда срабатывает PopupWindowAction.Если вы укажете WindowContentType, экземпляр SoPopUp создается заново каждый раз, когда запускается PopupWindowAction.Также обратите внимание, что DI используется для создания экземпляра SoPopUp, так что конструктор SoPopUp может иметь аргументы, которые должны быть разрешены с помощью DI.

0 голосов
/ 23 мая 2018

Лучше всего создать правильную модель вида, способную справиться с повторным использованием, как подробно описано, например, здесь .

Вы можете попытаться использовать RegionMemberLifetimeAttribute, но я бы не ожидал, что это поможет, потому что вы не пользуетесь навигацией ...

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