C# 将参数传递到Prism弹出窗口的正确方法

C# 将参数传递到Prism弹出窗口的正确方法,c#,wpf,prism,C#,Wpf,Prism,我正在WPF应用程序中使用Prism 6 我正在使用来自的区域popubehavior 但是,每当显示此弹出窗口时,似乎无法向视图传递参数。 -未调用INavigationAware.on导航到。 -如果视图不知道它所在的I区域的名称(据我所知),就无法获取视图的区域参数 命令向新视图提供参数的正确方式是什么 编辑: 我想能够显示从代码中的命令弹出窗口。 代码可能没有实际视图类的作用域,只有它的名称。如果您想使用Prism 6,您确实需要引用不到4年的示例,并且可能无法很好地使用最新的位 你可以

我正在WPF应用程序中使用Prism 6
我正在使用来自的
区域popubehavior
但是,每当显示此弹出窗口时,似乎无法向视图传递参数。 -未调用INavigationAware.on导航到。 -如果视图不知道它所在的
I区域的名称(据我所知),就无法获取视图的区域参数

命令向新视图提供参数的正确方式是什么

编辑: 我想能够显示从代码中的命令弹出窗口。
代码可能没有实际视图类的作用域,只有它的名称。

如果您想使用Prism 6,您确实需要引用不到4年的示例,并且可能无法很好地使用最新的位

你可以找到更多最近的例子

具体地说,您将希望查看交互示例,如果页面位于底部,请查看。这就是您现在用来管理确认、通知和其他交互(从最终用户获取输入)的弹出窗口的方法。这个例子也许正是你需要的。您可以使用它向交互传递信息,并从交互中获取信息

我有时使用这些来显示最终用户的小编辑交互。我传递了我希望他们编辑的对象,当他们单击“确定”并采取操作(更新/保存)时,我会返回更改的对象


我希望这对您有所帮助。

类通知有一个属性Content,对象类型。所以您可以将任何类型参数传递给弹出窗口。例如,在MainViewModel中:

using Prism.Interactivity.InteractionRequest;
using Prism.Commands;
public InteractionRequest<IConfirmation> ConfirmInPopup { get; private set; }
//code
 ConfirmInPopup.Raise(new Confirmation() {
                        Title = "Confirm",
                        Content = new MedInModel
                        {
                            MedOnlyCode = med.MedOnlyCode,
                            MedName = med.MedName,
                            MedNowAmt=10,
                            BoxId=med.BoxId
                        }
                    },t => 
                            if (t.Confirmed)
                            {

                            }
                         );

现在从Notification属性获取参数。

解决方案是在调用新窗口时不调用ShowDialog(),而只调用Show()方法。然后,这与OnNavigatedTo一起工作。因为调用ShowDialog时,主窗口应该暂停。只有在窗口关闭后,才会调用OnNavigatedTo方法。

感谢这些链接,它们看起来很有用。不过,我不知道它如何解决我的用例,我将更完整地填写我的问题。本质上,弹出窗口应该能够以代码显示,并通过其名称(而不是xaml)显示视图?您希望如何传递参数,使用命令,为什么您认为a区域弹出行为适合您,所有这些。@Landerah:您找到解决方案了吗?很抱歉,我没有找到任何好的解决方案。正如我向@R.Richards提到的,该答案中的解决方案并没有完全解决这个问题。这可能是因为我试图以一种不应该的方式使用棱镜。我已经迷恋了一段时间,也许有新的强大能力;)@ascholz我只想补充一点,问题是OnNavigatedTo只有在导航到至少一次之后才被调用。我想我是通过在启动时“导航”到所有东西来解决的…@Landerah:我找到了一个解决方案。希望对你有帮助。
using Prism.Interactivity.InteractionRequest;
public class ConfirmMedInViewModel : IInteractionRequestAware
{
        public INotification Notification
        {
            get
            {
                return _confirmation;
            }
            set
            {
                SetProperty(ref _confirmation, (IConfirmation)value);
            }
        }
        public Action FinishInteraction { get; set; 
}