首页 > 解决方案 > PRISM WPF 自定义交互请求 - 动态视图控件无法正确显示

问题描述

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

标签: wpfprism

解决方案


代替

<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,则每次触发 PopupWindowAction 时都会重新创建一个 SoPopUp 实例。另请注意,DI 用于实例化 SoPopUp,因此 SoPopUp 构造函数可能具有要由 DI 解析的参数。


推荐阅读