PRISM WPF自定义交互请求-动态视图控件无法正确显示

lek*_*kso 0 wpf prism

我对Prism / WPF自定义交互请求弹出窗口有疑问。弹出窗口在第一个请求时正确呈现,但是随后的每个弹出窗口都重复使用相同的视图。这将导致TextBlock控件串联文本,滚动条不可见,ItemsControl项目中的动态数据不可见,弹出窗口的大小错误等。是否可以通过每个新的交互请求强制创建新的弹出窗口或刷新其中的所有控件弹出窗口?

为了显示弹出窗口,我使用PRISM文档中的标准代码,例如,弹出窗口被实例化为:

PopUpViewModel displayData = reportCreator.GetReport();
this.CustomConfirmationRequest.Raise(displayData, res => { 
 if (res.Confirmed)  
 { ... }
});
Run Code Online (Sandbox Code Playgroud)

在哪里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>
Run Code Online (Sandbox Code Playgroud)

dvo*_*orn 5

代替

<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStartupLocation="CenterScreen">
  <prism:PopupWindowAction.WindowContent>
    <popups:SoPopUp/>
  </prism:PopupWindowAction.WindowContent>
</prism:PopupWindowAction>
Run Code Online (Sandbox Code Playgroud)

你可以用

<prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True" WindowStartupLocation="CenterScreen" WindowContentType = "{x:Type popups:SoPopUp}"/>
Run Code Online (Sandbox Code Playgroud)

当指定WindowContent时,在加载此xaml时将创建一次SoPopUp实例。然后,每次触发PopupWindowAction时,它就会被重用。如果指定WindowContentType,则每次触发PopupWindowAction都会重新创建一个SoPopUp实例。还要注意,DI用于实例化SoPopUp,以便SoPopUp构造函数可能具有要由DI解析的参数。