2013-04-16 43 views
0

I'm面临一个问题:PRISM - 创建一个新的对话实例每个交互请求 -

如果我做的第一个请求到对话框并将其添加到Grid.Children ......有时候我不得不在这个激活的对象中调用另一个对话框,在这种情况下,正在传递同一个实例抛出该动作,并且应用程序尝试再次向GRID子对象添加同一个实例....并且我得到一个异常。

对于我在视图模型中做的每个请求我想创建一个“views:DialogControl”的新实例,我该如何实现这一点?

按照我的观点互动:

<i:Interaction.Triggers> 
     <prism:InteractionRequestTrigger SourceObject="{Binding Path=NotificationToDialog}"> 
      <views:MessageAction> 
       <views:MessageAction.Dialog> 
        <views:DialogControl /> 
       </views:MessageAction.Dialog> 
      </views:MessageAction> 
     </prism:InteractionRequestTrigger> 
    </i:Interaction.Triggers> 

回答

0

你可以通过一个工厂创建对话框,而不是一个实例对话框本身。即您执行MessageAction.DialogFactory属性,而不是MessageAction.Dialog。 然后在您的(修改的)MessageAction中,您可以在触发时从工厂创建一个新的对话框。

但是,如果您只是将新对话框填充到父网格中(例如,禁用其他对话框等),则可能会遇到其他问题。将交互请求排列在动作中可能会更好。

0

什么TypeMessageAction.Dialog的?如果您为每个显示对话框请求创建ContentControl作为对话框元素,然后将DialogControl模型的具体实例作为ContentTemplate而不是将您创建的ContentControl传递给ContentTemplate,则可以避免出现问题。

这将使您的操作通用,并为每个请求创建一个新的实例。例如,MessageAction.DialogTemplateType可以是DataTemplate

相关问题