在 MVVM 中,ViewModel 响应视图中用户操作的最佳方式是什么?

2024-02-14

我在 MVVM 中的理解是:

  • View 知道 ViewModel
  • ViewModel 知道 Model
  • 但它不能向上工作,因此 Model 对 ViewModel 一无所知
  • 并且 ViewModel 对 View 一无所知

So ViewModel 如何响应用户在 View 上执行的操作,例如在文本框中输入内容或移动滑块等。

  1. 我明白这是完成的路由事件但我发现几乎所有 RoutedEvent 示例都在视图中使用 CodeBehind,而这正是 MVVM 中不再有的功能。

  2. 这样就剩下路由命令我在 MVVM 中找到了更多示例,但例如移动滑块实际上不是command从这个意义上说,它是一个事件,所以我想知道这是否真的应该使用。

  3. Then I 阅读建议 https://stackoverflow.com/questions/852441/fat-models-skinny-viewmodels-and-dumb-views-the-best-mvvm-approach/854824#854824例如 ”In MVVM 尽可能少地使用 RoutedEvents, and 无路由命令 at all." OK.

  4. 因此,例如在里面WPF 模型-视图-视图模型工具包 0.1 https://stackoverflow.com/questions/852441/fat-models-skinny-viewmodels-and-dumb-views-the-best-mvvm-approach/854824#854824来自 WPF 团队本身的项目,您有一个“委托命令”这看起来也是一种有趣的方式。

  5. 那么有些人也用“中继命令".

对于开发应用程序来说,做如此核心的事情会面临很多选择和困惑。

在 MVVM 中简单地完成我们过去 10 年使用 Code Behind 所做的事情的最佳方法是什么:

  • 创建按钮
  • 双击按钮
  • 编写处理代码

只是要明确的是,当人们提到委托命令 and 中继命令,他们实际上在谈论同一件事:ICommand 的实现,允许您传入委托。您可以互换使用它们。

就我而言,将视图 (XAML) 绑定到 ViewModel 中的 DelegateCommands 是实现 MVVM 的最佳方式。

我尽可能远离 RoutedEvents 和代码隐藏。

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

在 MVVM 中,ViewModel 响应视图中用户操作的最佳方式是什么? 的相关文章

  • 如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

    我需要在 AvalonDock 2 0 中加载项目集合作为文档 这些对象继承自一个抽象类 我想根据哪个子类在文档中渲染一个框架 这是我的 XAML
  • 如何在 WPF 中实现虚线或点线边框?

    我有一个ListViewItem我正在申请Style到 我想把灰色虚线作为底部Border 我怎样才能在 WPF 中做到这一点 我只能看到纯色画笔 这在我们的应用程序中效果很好 允许我们使用真正的边框而不是乱用矩形
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • 将 WPF 快捷键绑定到 ViewModel 中的命令

    我有一个使用 MVVM 模式的 WPF 应用程序 将按钮连接到 VM 非常简单 因为它们实现了 ICommand 我有一个工作原理类似的上下文菜单 下一步是为上下文菜单创建快捷键 我不知道如何让快捷键调用命令 这是一个例子
  • 如何在 RichTextBox 中以编程方式移动插入符位置?

    我有一个 RichTextBox 其中的特殊文本位具有自定义格式 但是 存在一个错误 即插入字符后 插入符号会放置在新插入的字符之前而不是之后 这是因为对于每次编辑 代码都会重新计算内容以应用自定义格式 然后像这样设置 CaretPosit
  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 使 DataTemplate 可混合

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

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • 如何在C#背后的代码中动态创建数据模板并绑定TreeView分层数据

    我有一个场景 其中树视图动态更改其数据模板和数据绑定定义 我在 XAML 中创建了一个树视图 如下所示
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • WPF:Prism 对于小型应用程序来说是不是太过分了?

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

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

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • WPF ListView/Gridview 允许用户选择多个项目并将它们分组在一起

    我在 MVVM 应用程序中有一个 WPF ListView GridViwe GridView 绑定到 ViewModel 中的列表 要求是用户应该能够选择网格视图的多行 右键单击它并看到上下文菜单 将这些行组合在一起 选择后 所有这些项目
  • WPF控件默认大小

    为 wpf 应用程序定义自定义资源主题时 我可以设置宽度 高度等 如何找到这些属性的默认值 即框架中提供的控件中使用的值 WPF 控件通常不包含任何类型的默认大小 WPF 的主要功能点之一是 除非您指定大小 否则所有内容都会动态调整大小 如
  • 不将 ViewModel 放置在单独的程序集中有充分的理由吗?

    我正在 WPF 中使用 MVVM 模式开发一个项目 MVVM 的主要优势之一是保持业务逻辑和表示之间的清晰分离 为了测试所有内容实际上的分离程度 周末我将所有 ViewModel 模型和业务逻辑移动到一个单独的 dll 中 exe 被保留为
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码

随机推荐

  • Matplotlib 添加默认水印

    我在用着matplotlib对于工作和公司来说 政策是在我们制作的每个图上都包含水印 有没有办法设置matplotlib默认情况下执行此操作 我目前正在通过每个Axes对象到辅助函数中 该函数在左下角添加水印 import matplotl
  • 如何隐藏/显示UIimageview?

    void viewDidAppear BOOL animated super viewDidAppear animated CGRect viewRect CGRectMake 250 100 30 30 as UIImageView al
  • “政党模式”背后的原则和好处是什么?

    派对模型 是关系数据库设计的一种 模式 它至少有一部分涉及找到许多实体 例如客户 员工 合作伙伴等 之间的共性 并将其分解到一些更 抽象 的数据库表中 我想了解您对以下问题的想法 政党模式背后的核心原则和动力是什么 它规定您对数据模型做什么
  • hadoop pagerank运行时出现错误

    我已经在我的 vmware 上安装了 hadoop 并设计了我的 jar 文件 pagerank 运行以下命令 hadoop jar PageRank 1 0 0 jar PageRankDriver init 输入输出 2 出现以下错误
  • R 如何在另一个函数中将函数作为字符串传递

    对于这个小难题的任何帮助将不胜感激 我正在尝试向tq transmute函数从tidyquant包裹 参数的值是一个函数 但是我想将其作为字符串传递 在下面示例的范围内 我将通过 Shiny 传递它 selectInput 我已经尝试了所有
  • 如何检测地址/坐标中是否可以使用 Google 街景

    我正在制作一个使用 Google 街景图像 API 的应用程序 我可以毫无问题地根据地址 坐标获取街景图像 但是 我想检测特定地址是否有可用的街景图像 以便为没有街景图像的地址显示不同的行为 到目前为止我唯一的想法是读取返回图像的像素并检测
  • java: R 无法解析为变量

    我知道这个问题以前已经被问过 但我对此无能为力 我刚刚创建了一个新项目并收到此错误 当然 R java 文件没有被生成 我正在使用 JRE7 android 4 2 2 package com example myfirstapp impo
  • TensorFlow 中张量值的条件分配

    我想复制以下内容numpy代码在tensorflow 例如 我想分配一个0到先前值为的所有张量索引1 a np array 1 2 3 1 a a 1 0 a should be 0 2 3 0 如果我写类似的代码tensorflow我收到
  • 如何在Windows服务器上运行solr使其自动启动?

    如何在 Windows 服务器上运行 solr 使其自动启动 我运行它 java jar start jar 但我需要服务器自动执行此操作 使用您需要的命令创建一个批处理文件并在启动时运行它 一些these http windowsxp m
  • 场景生成器中的自定义控件 ClassNotFoundException

    我通过扩展现有控件创建了一个新控件 并且我想在我的 JavaFX 场景中使用这个新控件 我希望能够使用场景生成器编辑场景 但是将新控件添加到 FXML 文件后 我遇到了ClassNotFoundException打开场景生成器时 例如 这是
  • 为什么这段代码不会抛出 StackOverflow 异常

    在 clojure v1 6 0 中 这段代码会永远运行并消耗 100 的一个核心 defn average x y x y 2 defn improve guess x average guess x guess defn sqrt it
  • Spotify API - 在 Google Apps 脚本中检索有效访问令牌

    以下是 Spotify API 的文档 我使用的是隐式授权流程 https beta developer spotify com documentation general guides authorization guide implic
  • IntelliJ 中的 Cucumber.js 调试

    IntelliJ 有一个 Cucumber js 插件 这假设可以在 IDE 内启用运行和调试 cucumber js 的运行配置有效 但调试模式已停用 无法单击 调试 按钮 还有其他人有同样的问题并设法解决它吗 调试对我来说非常重要 谢谢
  • Python3 TypeError:列表索引必须是整数或切片,而不是 str

    我的任务是获取字符串 AAAABBBCCDAABBB 放入这样的列表中 A B C D A B 我现在已经为此工作了 2 个小时 但无法找到解决方案 到目前为止 这是我的代码 list string AAAABBBCCDAABBB i 1
  • 阅读 Facebook 中的消息

    我一直在尝试阅读来自特定用户 朋友 的消息 我在图形 API 中找不到有关查询 Facebook 消息中的消息或线程的正确文档 谁能帮帮我吗 您只能为使用您的应用程序的用户阅读消息 而不能为他的朋友阅读消息 这是一件好事 要为当前用户执行此
  • 为什么 JSF 将 UI 组件的状态保存在服务器上?

    JSF 在服务器端保存 UI 组件的状态到什么时间以及 UI 组件的状态信息具体何时被删除从服务器内存 当应用程序上的登录用户浏览页面时 组件的状态是否会继续在服务器上累积 我不明白在服务器上保持 UI 组件状态有什么好处 直接将验证 转换
  • 签署 Windows EXE 文件

    我有一个EXE http en wikipedia org wiki EXE我想要签署该文件 以便 Windows 不会警告最终用户来自 未知发布者 的应用程序 我不是 Windows 开发人员 所讨论的应用程序是从生成屏幕保护程序的应用程
  • Python:在类实例初始化之前修改传递的参数

    我正在尝试用 Python 实现简化的术语重写系统 TRS 符号代数系统 为此 我真的希望能够在类实例实例化过程中的特定情况下拦截和修改操作数 我想出的解决方案是创建一个元类来修改典型的call类对象 类型为 type 的行为 class
  • 如何在 Javascript 中说明多重图? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 这个问题正在寻找一种实用且简单的方法来使用 Javascript 绘制多重图 首先看this http
  • 在 MVVM 中,ViewModel 响应视图中用户操作的最佳方式是什么?

    我在 MVVM 中的理解是 View 知道 ViewModel ViewModel 知道 Model 但它不能向上工作 因此 Model 对 ViewModel 一无所知 并且 ViewModel 对 View 一无所知 So ViewMo