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

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(使用前将#替换为@)

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

  • 当前线程中的单例

    我的单身人士如下 public class CurrentSingleton private static CurrentSingleton uniqueInstance null private static object syncRoo
  • 如何在 XAML 和 C# 中将字符串列表显示为 DataGrid(表)

    我已经在 SO 上潜伏了很长时间 直到最近才决定建立一个帐户 我花了很多时间试图解决这个我一直没有询问的问题 但我就在这里 我正在努力实现的目标 我有一个字符串列表 例如 Mango Banana Melon 我们称之为水果 我想将其显示为
  • XAML WPF 如何在 FlowDocument 上添加内嵌背景图像?

    下面的代码是给Flow Document添加背景图片
  • 基于动态资源的样式

    看来这样的事情是不允许的 有什么解决办法吗
  • WPF DataGrid 显示点而不是逗号

    在网上查找并寻找答案后没有结果 我想向您寻求帮助 我有一个包含 2 列的 SQL 数据库表 浮点数据类型 例如 1 2 1 3 1 4 等 绑定到一个DataGrid XAML 代码
  • WPF - 普通 [标签:输入] 控制的最佳实践

    我想知道 这是在 WPF 中获取众所周知的标签输入 或输出 无关紧要 组合的最佳和最快的方法 这是一个简单的任务 只需考虑 对象 ME 的快速输出 名字 克里斯蒂安 年龄 28 心情 好 我知道 我可以使用带有文本块的网格 但说实话 这个
  • 如何从 WPF 应用程序访问 Windows 文件预览图标

    我在一个目录中有一堆图片和视频 需要在WPF应用程序中显示 我正在考虑将Win7大图标本身显示为预览图像 因为这将节省我从视频文件中抓取适当帧的工作 因为 Windows 已经很好地完成了这项工作 有任何代码片段可以访问此 Shell 图标
  • 如何计算 WPF 中的非客户端窗口大小?

    WPF 有SystemParameters class http msdn microsoft com en us library system windows systemparameters aspx公开了大量的系统指标 在我的计算机上
  • 在WPF中如何添加菜单项事件?

    在我的 WPF 应用程序中 我添加一个菜单 然后在其下添加几个菜单项 例如 我的菜单项之一是 Main Item 然后我在 Main Item 下添加subItem1 subItem2和subItem3 我想单击 subItem1 并执行某
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • 无法在 WPF 中使用 MVVM 在设计时进行数据绑定 - ViewModel 属性永远不会被调用

    好吧 我正在为此烦恼 所以任何帮助将不胜感激 我正在使用 MVVM 模式构建 WPF 应用程序 为了在设计时获取数据 我将 Ninject 依赖注入框架与服务定位器结合使用 很像文章中的示例 http jonas follesoe no Y
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • WPF 简单绑定到对象属性

    我在 wpf xaml 中绑定时遇到一些问题 有这个简单的文件
  • 在 WPF 媒体元素中连续重播视频

    我有一个在媒体元素中播放的视频文件 我需要继续播放 因此我尝试了 me play me MediaEnded new RoutedEventHandler me MediaEnded 使用此事件方法 loop to keep video p
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • WPF C# 输入框

    我正在使用 C 构建 WPF 应用程序 我想弹出一个对话框提示用户输入他 她的名字 之后 我将跟踪该名称并将一些数据保存到 txt使用该名称的文件 例如 输入的名称是姓名 约翰 所以我有数据数据 1 2 3 然后我将 数据 保存在John
  • MVVM 焦点到文本框

    我如何将焦点集中在TextBox没有指定名称TextBox 目前我正在做以下事情
  • 包含其他类集合的类的设计(操作方法)

    如何设计涉及其他类集合的类 一般示例 A 工作空间包含数量Projects A Project包含大量资源 Each Resource可能包含大量Files 所以这里标识的类可以是 Workspace Project Resource 和
  • 如何将 WPF 3.0 下构建的应用程序转换为 4.5 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 WPF 3 0 中构建了一个应
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多

随机推荐

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

    这个问题在这里已经有答案了 有没有一种简单的方法来确定变量是列表 字典还是其他变量 有两个内置函数可以帮助您识别对象的类型 您可以使用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 来了解这个东西是如何