如何解决如何使用WPF Prism库打开多个窗口?
我是PRISM
库的新手。尽管更新很快,但文档却令人困惑,不完整,并且混合了许多版本。目前,我正在使用PRISM 8
。
我想通过一个示例如何从主窗口按钮打开多个窗口(模式窗口和非模式窗口),发送参数以及接收消息的示例方面有所帮助,因为我只能找到注入到窗口中的UserControl View的示例。窗口视图。
解决方法
Prism库不以任何方式限制您使用Windows,就像在WPF中没有它一样。您可以编写适合自己的窗口服务,以管理实例化和显示窗口。如何实现它们之间的通信取决于您。您可以使用Prism的事件聚合器在视图模型之间进行通信。
IDialogService
是Prism 7.2.0.1367中引入的一项功能,它是此类服务的内置实现。 documentation的版本是最新的,没有什么可添加的,因为它涵盖了创建对话框,传递参数,显示对话框以及注册自定义窗口和样式等所有内容。
Prism 8中唯一发生变化的是,您现在可以注册多个对话框窗口。
// Default dialog window
containerRegistry.RegisterDialogWindow<MyDialogWindow>();
// Another dialog window that can be accessed by name
containerRegistry.RegisterDialogWindow<MyOtherDialogWindow>(nameof(MyOtherDialogWindow));
使用对话框服务显示对话框时,可以按名称引用它们。
// Shows the dialog view in them default dialog window
dialogService.Show(nameof(MyView),new DialogParameters(),result => { /* ...handle result.*/ });
// Shows the dialog view in the "MyOtherDialogWindow"
dialogService.Show(nameof(MyView),result => { /* ...handle result.*/ },nameof(MyOtherDialogWindow));
我想举一个例子,该例子说明如何从主窗口按钮[...]打开多个窗口(模态和非模态)
您需要在视图模型中访问IDialogService
。将其传递给构造函数并将其存储在字段中。依赖项容器将自动注入它。
private readonly IDialogService _dialogService;
public MyViewModel(IDialogService dialogService)
{
_dialogService = dialogService;
}
在视图模型中创建绑定到视图中的按钮的ICommand
属性。
OpenDialogCommand = new DelegateCommand(ExceuteOpenDialog);
在execute方法中,创建对话框参数,并使用Show
或ShowDialog
(模态)显示对话框。
private void ExceuteOpenDialog()
{
dialogService.Show(nameof(MyOtherView),result => { /* ...handle result.*/ });
}
[...]发送参数和接收消息,[...]
这取决于您的要求,但是您可以查看事件聚合器。 documentation仍然有效且全面,因此无需添加任何内容。
[...]我仅能找到注入到Window View中的UserControl View的示例。
这就是对话框服务的工作方式。您可以使用任何UserControl
来在对话框中显示。对话框服务自动将其放置在对话框主机窗口中。这样,您可以重用视图,并使更改和维护更加容易。如果将视图定义为Window
,则将失去在不更改视图类型及其XAML的情况下应用不同对话框窗口的灵活性,以及无法将其用作其他视图中其他位置的功能。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。