好吧,我不知道任何开箱即用的解决方案,但是创建这样一个可重用的对话框实现并不难。实际上,几年前我实现了类似的东西。好吧,那是另一份工作,所以我再也无法访问代码了。此外,我无法记住所有细节,但我可以尝试为您提供这种实现的基本概念。
您可以创建一个DialogVm
提供通用对话框功能的 .
首先,表示层中的对话框需要什么?通常,三个按钮,如...
- 应用、取消和关闭(修改对话框)
- 确定和取消或是和否(问题对话框)
- 好的(如果是消息框)
如您所见,您需要三个命令(ICommand
doc)。实际上,我已经创建了一个DelegateCommand
实现(基于this)。ICommand.CanExecute
确定绑定按钮是禁用还是启用。如果命令为空,则应隐藏该按钮。
(如果您使用的是正确的布局控件,则按钮的位置会正确调整,如果未显示按钮。)
为了提供对上述四种以上场景的支持,我在 中添加了一个CommandTitle
属性DelegateCommand
,以便按钮的内容来自那里。
接下来你需要一个Title
属性作为对话框的标题。所以将这个添加到DialogVm
.
如果您希望能够Window
通过执行命令来关闭对话框(只有必要,如果它是 的子级),您可以遵循这种方法。当然,我已经使用了我在那里描述的版本。但其他人也看起来很有希望。
最后一个打开点是一个属性,表示不同的对话框内容。如果我没记错的话,我使用了一小组视图模型和相应DataTemplates
的(当然还有一个TemplateSelector
,它根据 VM 类型提供正确的模板)。当然,您还需要ContentPresenter
对话框中的控件,该控件DataTemplate
显示TemplateSelector
.
如果您只有几种不同的对话框类型(例如问题框、消息框...),这是唯一的下站点,它只是一个好方法
使用非常简单。DialogVm
简单地说,用所需的ICommand
逻辑初始化一个实例, DialogContentVm(无论如何你想调用它),将它传递给DialogWindow(也许,你想使用一些不同的东西,例如浮出控件)并将其呈现给用户。
好吧,我希望它有所帮助。如果您需要更多信息或任何帮助,请告诉我。