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

时间:2018-05-23 15:47:33

标签: wpf prism

我遇到了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 :(得分:4)

而不是

<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时,在加载此xaml时会创建一次SoPopUp实例。每次触发PopupWindowAction时都会重复使用它。如果指定WindowContentType,则每次触发PopupWindowAction时都会重新创建SoPopUp实例。另请注意,DI用于实例化SoPopUp,以便SoPopUp构造函数可以具有由DI解析的参数。

答案 1 :(得分:0)

最好的办法是创建一个能够应对重复使用的正确视图模型,例如详细here

可以尝试使用var MyObject1 = function(a, b) { return { myA: a, myB: b, hello: function() { return "Hello !"; } }; }; let obj1 = MyObject1(1, 2); console.log(obj1); console.log(obj1.myA);,但我不希望在这里提供帮助,因为你没有做导航......