模型-视图-呈现器和模态对话框...如何?

2023-11-22

我正在 WPF 中实现 MVP/M-V-VM,到目前为止我很幸运。但是,我不知道该模型如何支持实现模态对话框。我的工作源自 Crack.NET (http://www.codeplex.com/cracknetproject)来了解这个东西是如何工作的。

我有一个 ShellView 视图(只是 XAML),上面有一个菜单。该菜单绑定到 ShellModelView 中的“EditPreferences”命令。

ShellModelView 实现了 EditPreferences 的 ICommand,这里我们想要建立一个对话框来让用户编辑应用程序的首选项。

这里有几个问题: 1. ShellModelView 没有对 ShellView 的引用来正确设置对话框的父级。 ShellModelView 是 ShellView 的 DataContext,但我没有看到设置的反向引用。 2. ShellModelView 无论如何都不应该加载显式 UI。那么这里正确的交互模型是什么? 3. 如何构建 PreferencesDialog,使其在逻辑和视图之间正确分离? PreferencesDialog 本身需要是一个 Window,以便您可以在其上调用 ShowDialog,但这意味着您需要对 Window(例如 View)的引用才能实例化它。理想情况下,我应该能够在 PreferencesDialog 中对代码/验证进行单元测试,而无需实例化视图(也许使用模拟视图?)。


也许这不是正确的看待方式,但这是我在 WPF 中使用 M-V-VM 所采用的方法。打开窗口和对话框或“EditPreferences”视图是 UI 特定功能。如果我要重写整个 UI 来替换所有视图,我可能最终会将“EditPreferences”视图与另一个视图结合起来,因此永远不想在另一个屏幕中打开它。如果这与 ViewModel 绑定在一起,那么就很难解决。在这种特殊情况下,我的“ShellView”中有一个按钮或菜单项,它创建“EditPreferences”视图的新实例,然后传入“EditPreferences”ViewModel,该视图模型可能来自“ShellViewModel”中的属性”,或者也许我的“EditPreferences”视图实例化了 ViewModel 本身。

这是一个关于 SO 的类似问题,基本上说的是同样的事情:M-V-VM 设计问题。从 ViewModel 调用 View

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型-视图-呈现器和模态对话框...如何? 的相关文章

  • 为什么 System.AppDomain.CurrentDomain.BaseDirectory 返回不同的结果?

    我将数据库的路径 包含一些 xml 文件的文件夹 存储在 app config 中 在启动时 我检查路径是否存在 如果不存在 我想将路径设置为默认路径 代码如下所示 public void CheckAndRepairSettings Ch
  • WPF 中的数据绑定?

    我正在尝试在 WPF 中设置数据绑定 我有班级人员 它通过一个文本框进行更新 类似老式的 另一个文本框应该通过数据绑定镜像对人员对象的更改 它曾经是 type twoway 但抛出了xamlparse 异常 它不是这样工作的 点击显示 pe
  • WPF MVVM:如何禁用单击的按钮并启用所有其他按钮?

    我有一组按钮 只要单击其中一个按钮即可启用 而单击的按钮则被禁用
  • Prism RegionAdapter - 删除然后添加视图

    我有一个包含 AvalonDock 的 prism wpf mef 解决方案 我创建了一个RegionAdapterBase
  • 使用超类创建构建器时,父类无法返回子类的实例[重复]

    这个问题在这里已经有答案了 如果我使用构建器模式来配置新对象 我可能有两个类 例如Game and HockeyGame 如下所示 当我想创建一个新的HockeyGame 我得到它的构建器并开始调用方法来根据需要配置对象 我遇到的问题显示在
  • 从模板绑定到 viewmodel 的属性

    我为我的 GameViewModel 创建了一个视图 我有一些像这样的xaml
  • 拖动用户控件,但将其保留在 WPF 中其父级的边界内

    我有一个用户控件 正在将其拖动到网格内 Z Index 设置得相当高 这样我就可以将其保持在其他孩子之上 拖动控件效果很好 但如果用户想要将控件移到网格之外 它会允许这样做 How do I keep it from leaving the
  • 如何在wpf中打印屏幕截图

    首先我英语说得不太流利 反正 我正在尝试这样做 然而这还不是第三天 我现在正在做的是屏幕捕获后的程序屏幕打印 我参考这段代码 https social msdn microsoft com Forums windows en US 0623
  • 滚动 X 轴绘图区域 - Silverlight 柱系列

    我有一个工作正常的柱形系列图表 我有一个需要添加的功能 我希望水平滚动能够启用到 x 轴的绘图区域 这是屏幕截图 如果您看到屏幕截图 我有 6 个项目 并且由于项目数量较多 条形图非常细 所以假设如果我有 20 个项目 那么条形图将根本不可
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 重写 WPF 工具包图表中的 DataPointStyle

    我想覆盖DataPointStyle of the LineSeries在我的 WPF 工具包中Chart
  • WPF HierarchicalDataTemplate 不会在属性更改时更新 ItemsSource

    这是一些 XAML
  • 使 DataTemplate 可混合

    如何为 ViewModel 制作可混合的数据模板 可在表达式混合中设计 当我转到资源并尝试直接编辑数据模板时 我在绘图板上看到的只是一个空白矩形 这是因为 DataTemplate 没有绑定到任何东西 当然 我可以创建一个 UserCont
  • 窗口关闭后仍在调用方法

    首先我不知道这是不是一个愚蠢的问题 我有这样的场景 首先我有一个主窗口 public MainWindow InitializeComponent dt is a System Windows Threading DispatcherTim
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • 视图中的 XamlParseException

    我有一个仅显示标签的视图 视图模型已正确注入视图中 因为标签的文本已绑定到视图模型属性 现在 如果我尝试在 xaml 中定义 DataGrid 则会出现 XamlParseException System Windows Markup Xa
  • WPF:Prism 对于小型应用程序来说是不是太过分了?

    如果我不将我的应用程序分成不同的模块 否则我会认为 Prism 确实是可行的方法 我应该使用 Prism 吗 我知道 Prism 提供了一个方便的实现ICommand 我可以自己在一页代码中完成 并为我们提供IEventAggregator
  • 如何在运行时添加到 TreeView 目录

    我有一个TreeView我想允许用户添加和删除子项目 在探索基本功能时 我使用button and a textbox添加此子项 当用户点击button a new TreeViewItem需要创建并设置为我的父项的子项TreeView与t

随机推荐

  • 判断对象的类型? [复制]

    这个问题在这里已经有答案了 有没有一种简单的方法来确定变量是列表 字典还是其他变量 有两个内置函数可以帮助您识别对象的类型 您可以使用type 如果您需要对象的确切类型 并且isinstance to check对象的类型针对某物 通常 您
  • C# 中的 IRC 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想在我的程序中嵌入一个小聊天窗口 用作基本的 IRC 客户端 这需要有限的功能 例如连接 断开连接 列出用户和发送私人消息 在撰写本文时 我已经尝试了几个臃肿的库 这些库使得创建一
  • 字典方法 Remove 和 Clear (.NET Core) 在枚举期间修改集合。没有抛出异常

    我正在尝试实现一个缓存机制安全地枚举集合 并且我正在检查内置集合的所有修改是否都会触发InvalidOperationException由各自的枚举器抛出 我注意到在 NET Core 平台中Dictionary Remove and Di
  • 如何使用 vaadin 使 VerticalLayout 可滚动?

    我有一个组件 它作为我所有页面的通用布局而存在 该组件的布局如下 使用油漆制作 所以请抱歉 p 向右箭头表示该布局是 Horizo ntalLayout 向下箭头表示 VerticalLayout 我真的很感兴趣使 bodyContent
  • 为什么归并排序中阈值交叉后要使用插入排序

    我到处都读到了分而治之的排序算法 例如Merge Sort and Quicksort 与其递归直到只剩下一个元素 不如转移到Insertion Sort当达到某个阈值 例如 30 个元素 时 这很好 但为什么只是Insertion Sor
  • 我如何在 google colab 中动态(循环)显示图像?

    我一直在尝试使用 pyplot matplotlib 来显示图像 因为它们在循环中变化 但我无法让任何东西工作 我基本上无法更新所显示的图像 这是复制问题的代码 f plt figure 1 ax plt gca show obj ax i
  • C++ 默认初始化是否保留先前的零初始化?

    如果具有静态存储持续时间的对象的 C 构造函数未初始化成员 是否需要保留先前的零初始化 或者是否会为成员留下不确定的值 我对 C 规范的解读是 它是自相矛盾的 Example include
  • 将 10,000,000 个文件从 Linux 上传到 Azure Blob 存储

    我对 S3 有一些经验 并且过去使用过s3 parallel put将许多 数百万 个小文件放在那里 与Azure相比 S3的PUT价格昂贵 所以我正在考虑切换到Azure 然而 我似乎无法弄清楚如何使用将本地目录同步到远程容器azure
  • 使用 Javascript 将 CSS 样式表作为字符串注入

    我正在开发一个 Chrome 扩展程序 我希望用户能够添加自己的 CSS 样式来更改扩展程序页面 而不是网页 的外观 我研究过使用document stylesheets 但它似乎希望将规则分开 并且不允许您注入完整的样式表 有没有一种解决
  • 如何为 WCF 客户端指定备用配置文件?

    我正在开发一个大型系统 我必须使用 WCF 来访问 Web 服务 我的测试代码工作正常 现在我需要将我的 WCF 客户端代码集成到更大的系统中 我无法添加到现有的 app config 文件 并且希望指定一个单独的 config 文件以供我
  • Android:如何从原始短信中获取发送者和接收者的电话号码

    我在从传入的原始短信中查找接收者电话号码时遇到问题 这是我正在尝试的代码 有人可以告诉我如何从原始短信中检索接收者的电话号码 public class SMSReceiver extends BroadcastReceiver privat
  • 如何清除文本字段焦点上的文本字段

    我想在用户单击该文本字段时清除该文本字段
  • 淘汰赛选中/取消选中所有组合框

    我使用淘汰赛将 JSON 对象映射到用户控件 我有一个复选框列表 他们看着像是
  • 表格的语言翻译

    我知道大多数人使用下面的方法并为需要翻译的特定表创建一个翻译表 但这可能会导致大量表的负载 CREATE TABLE Product Product id ProductTrans id FK CREATE TABLE ProductTra
  • 如何通过 GET 调用 ASMX Web 服务?

    我在这里定义了一个网络服务 app AutocompleteManager asmx WebMethod public string AutocompleteComposers return hey what s up 我想使用带有额外参数
  • 在android中显示unicode字符?

    我创建了一个消息应用程序 并且了解到很大一部分会员并不居住在北美或英国 当他们发布消息时 仅返回乱码文本 存储数据的所有数据库列均采用 UTF 8 格式 有没有办法正确显示某人已经输入的 UTF 8 字符 请参阅下面的屏幕截图 最简单的一个
  • 通过PHP远程服务器文件上传

    我有两台服务器 一台用于我的网站 另一台用于存储 我正在尝试创建一个页面 让其他人可以将文件上传到存储服务器 我希望使用表单帖子将其发送到那里 我写了一段非常简单的代码来解决这个问题 但遇到了一些麻烦 如果我将操作更改为将其保存在同一服务器
  • Cordova Firebase 插件通知 - 无法添加任务“:processDebugGoogleServices”,因为同名任务已存在

    我正在尝试在使用 Ionic 构建的 Phonegap Cordova 应用程序上添加 Google Firebase 通知 我已经成功安装了用于登录的 Google Plus 插件 我认为这将是一个有用的信息 我只需要这个 Firebas
  • 主键可以使用字符值吗?

    与使用基于字符的字段相比 在数据库表中使用唯一的数字 ID 字段是否会带来性能提升或最佳实践 例如 如果我有两个表 athlete id 17 name 里基 亨德森 teamid 28 team teamid 28 teamname Oa
  • 模型-视图-呈现器和模态对话框...如何?

    我正在 WPF 中实现 MVP M V VM 到目前为止我很幸运 但是 我不知道该模型如何支持实现模态对话框 我的工作源自 Crack NET http www codeplex com cracknetproject 来了解这个东西是如何