gpt4 book ai didi

c# - 创建一个 MVVM 友好的对话策略

转载 作者:IT王子 更新时间:2023-10-29 04:30:43 25 4
gpt4 key购买 nike

我正在尝试创建一种策略来处理弹出式表单,以便在我的应用程序的任何部分使用。到目前为止,我的理解是我需要一个 UserControl在我的主窗口的根目录中。这将绑定(bind)到它自己的 ViewModel,后者将处理在应用程序内发送的消息。

我正在使用 MVVM Light,而且我对 Messenger 还很陌生类。

想象一个 Master/Details 场景,其中对象列表包含在 ListBox 中.选择其中一项并单击“编辑”按钮将显示 UserControl覆盖整个屏幕。然后用户可以编辑所选项目,然后单击“确定”以提交更改。

我想要 UserControl它以一种我可以向它抛出任何(可能是一个 ViewModel)的方式被打开为“通用”...以便它通过 DataTemplate 呈现 ViewModel并处理所有对象更改。单击“确定”将回调到发送类并像以前一样保留更改。

一些有用的情况是...

  1. 显示不需要用户输入的错误消息(除了确定关闭它)
  2. 显示数据项的编辑表单
  3. 确认对话框(很像标准的 MessageBox)

任何人都可以提供我如何实现此目标的任何代码示例吗?

最佳答案

使用 MVVM 设计 UI 时,目标是将 View 的关注点与 ViewModel 的关注点分开。理想情况下,ViewModel 不应依赖于任何 View 组件。然而,这是理想的,MVVM 的另一条规则是您应该按照自己的意愿设计应用程序。

在提供显示对话框的服务的区域中,有两种不同的方法:

  1. 在 View 上实现 DialogService(例如,参见 http://geekswithblogs.net/lbugnion/archive/2011/04/13/deep-dive-mvvm-samples-mix11-deepdivemvvm.aspx 示例 03)。
  2. 实现不附加到 View 的服务组件(例如,参见 http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/)

这两种方法都依赖于定义服务提供的功能的接口(interface)。然后将此服务的实现注入(inject)到 ViewModel。

此外,这两种方法各有优缺点。

  • 第一种方法也适用于 WP7,但是,它需要一个公共(public) View 基类,因为它包含 View 服务的实现。
  • 第二种方法适用于 SilverLight、WPF 和 appleals,因为它使服务与 View 分离并且不对 View 施加任何限制。

另一种可能的解决方案是使用消息传递来显示对话框。

无论您使用何种方法,请尝试通过使用 IoC(控制反转)模式来保持 View 和 ViewModel 分离,即定义一个接口(interface),以便您可以使用不同的实现。要将服务绑定(bind)到 ViewModel,请使用注入(inject),即将服务传递到 ViewModel 的构造函数或通过设置属性。

关于c# - 创建一个 MVVM 友好的对话策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com