MVVM 中的命令

2024-03-15

我看过一些教程,人们在他们的代码中创建像 CanExecute 这样的方法。我假设他们这样做是为了帮助读者理解这一切是如何运作的。当我查找 Command 和 ICommand 时,它会将我带到 MSDN 上用于 Windows 应用商店应用程序的 ICommand 类。 WPF 没有 Command 类吗?


的内置实现ICommand在 WPF 中是RoutedCommand http://msdn.microsoft.com/en-us/library/system.windows.input.routedcommand.aspx(及其兄弟姐妹RoutedUICommand). RoutedCommand工作原理如下:

The Execute and CanExecute上的方法RoutedCommand不包含 命令的应用逻辑与典型的情况一样ICommand,而是这些方法引发了遍历的事件 元素树寻找具有 a 的对象CommandBinding。事件 附加到的处理程序CommandBinding包含命令逻辑。

这样做的问题是这些事件处理程序必须附加到您的代码隐藏中view,这正是你所做的not想要在MVVM中做。

您所看到的教程CanExecute代码中的方法(我们真正的意思是代码之外的ICommand执行)正在使用自定义命令实现,例如DelegateCommand http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.commands.delegatecommand%28v=pandp.40%29.aspx and RelayCommand http://mvvmlight.codeplex.com/SourceControl/changeset/view/cf8d07c2ec3f#GalaSoft.MvvmLight/GalaSoft.MvvmLight%20%28NET35%29/Command/RelayCommand.cs旨在“转发”他们的CanExecute/Execute动态提供的函数逻辑;通常,这些是视图模型上公开命令的方法。

这些实现通常由 MVVM 框架提供(对于这两个示例,框架分别是 Prism 和 MVVM Light),但它们非常简单(两者都是开源的,获取代码并阅读它),并且没有什么可以阻止您复制/粘贴如果您不需要整个框架,则可以使用代码。

您可以将上面的内容总结为“有is在 WPF 中内置了一个命令类,但它在 MVVM 上下文中并不是真正有用”。

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

MVVM 中的命令 的相关文章

随机推荐

  • 如何在 Windows 上的 Firefox 中阻止 Flash 内容透过 jQuery UI 对话框

    我正在使用 jQuery UI 对话框 在 Windows 上的 IE 和 FF 中 我通过对话框获取底层 Flash 内容 我通过启用 IE 解决了这个问题bgiframejQuery 对话框窗口上的选项并更改bgiframe脚本适用于任
  • 如何从 Mesos 框架 Scheduler 类读取 mesos 任务 stdout/stderr?

    我正在开发一个 Mesos 框架 它工作得很好 我唯一的问题是我无法从 Scheduler 类内部读取任务 stdout 或 stderr 我在下面提供了一个代码示例 我想读取已完成任务的标准输出和标准错误 最好在 statusUpdate
  • 10e 表示法与变量一起使用吗?

    我想知道如何在 python 2 7 9 中使用变量的 10eX 表示法 就文字而言 10eX 给出 10 X 00000 浮点数 然而 我想使用一些变量而不是文字 但它不起作用 如果可以的话 我应该进行什么语法更改或者是否有其他方法可以这
  • 代码块、单个项目、许多可执行文件

    I use 代码 块 http en wikipedia org wiki Codeblocks和 C 我的项目应该构建多个可执行文件 一组使用共享库的小工具 如何设置 CB 生成多个二进制文件 每个二进制文件都有自己的main 看看Cod
  • 如何为我的 bool 属性正确实现 INotifyPropertyChanged 并绑定到 CheckBox.IsChecked?

    这里是新手 我一直在尝试围绕数据绑定进行思考 并想尝试将视图中的复选框双向绑定到我称为 State 的单独类中的布尔值 关键是要确保它们始终保持同步 因此 我在视图中创建了一个复选框 并将其绑定到前面提到的 State 类中的布尔属性 并附
  • winsock 在哪里存储套接字的 IP 地址?

    假设我有一个简单的 winsock 服务器 它有一个侦听套接字 然后当接受连接时 它将套接字存储在套接字数组中 以允许多个连接 如何获取特定连接的 IP 地址 它是否存储在套接字句柄中 只要套接字保持连接 您就可以获得自己的套接字地址和对等
  • 在 Java 中反序列化 C# 二进制

    我有一个系统 其中使用 C 程序创建序列化文件 然后在另一个 C 程序中反序列化 我想知道是否可以在 Java 中对 C 文件进行二进制反序列化 Thanks 您可以尝试使用一些具有两个平台实现并以与平台无关的格式输出数据的序列化器 例如
  • Angular 2:如何将 JavaScript 日期对象与 NgModel 两种方式绑定一起使用

    我正在使用 Angular 2 并且有以下代码 JS 此代码启动模板的员工变量 handleEmployee employee Employee this employee employee this employee startDate
  • 在 Windows 上使用 cmake 用于 C++

    连续大约 5 天 我一直在尝试使用 C 环境设置我的计算机 以便使用 sdl glm opengl 等库进行编程 能够在 UNIX 机器上的演示中运行它对我们来说很重要 所以我使用 cmake 运行 我终于让它与 cmake gui 一起工
  • 更改 WooCommerce“xyz”类别页面上显示的产品数量

    目前 我在 xyz 类别中有 19 个项目 但我一次只能看到其中 5 个 并且显示分页 但我不想分页 有没有办法让 5 个以上的项目显示在 xyz 类别的首页上 我将以下代码添加到模板的 function php 中 add filter
  • MySQL 控制台导入大型 SQL 文件时速度缓慢

    我通过 MySQL 控制台导入 SQL 的速度相当慢 而且随着我们的 SQL 文件每天都在增加 我想知道是否有其他方法可以更快地导入 SQL 文件 更改为 Oracle 或其他系统不是一个选择 配置必须保持不变 目前 SQL 文件大小为 1
  • android 游标到 JSONArray

    如何将 Cursor 转换 为 JSONArray 我的光标为 3 列 id 姓名 出生 我已经搜索过 但找不到任何示例 游标到 JSONArray public JSONArray cur2Json Cursor cursor JSONA
  • VirtualBox WordPress 重定向到端口 80

    我在 OSX 10 9 2 上运行 我刚刚在 VirtualBox 中的 Lubuntu 上设置了 LAMP 这样我就可以通过 VirtualBox 运行开发服务器 我改变了我的 etc apache2 ports conf监听 8080
  • Android Studio3.2 APK 构建错误 -> 保留文件或目录名称“lib”

    Android Studio 版本 3 2 AI 181 5540 7 32 5014246 在 Android Studio 3 1 中 我能够成功构建 SignedAPK 但当我制作了 Android Studio 3 2 后 我根本无
  • 添加回调 url 时 Twitter API oAuth 签名失败

    我正在使用这个代码 指南另一个失败的 Twitter oAuth cURL 访问令牌请求 https stackoverflow com questions 3295466 another twitter oauth curl access
  • .NET 转到 NuGet 包的实现

    有谁知道一种方法 工具可以让我浏览实施来自 NuGet 包的方法 类型 通过具有原始PDBs or a URL哪里可以得到它们 我知道来源链接 https github com dotnet core blob master Documen
  • 使用Flask return修改网页

    我有最简单的烧瓶应用程序 app Flask name app route python methods GET POST def index return Hello World if name main app run debug Tr
  • 从 thymeleaf spring 框架中的本地目录插入图像(使用 maven)

    我使用此链接开发了一个项目 https spring io guides gs serving web content https spring io guides gs serving web content 我使用maven来开发上述项
  • 使用参数作为列名的“排序依据”

    我们希望在使用 Visual Studio 数据集设计器创建的查询或存储过程的 Order By 子句中使用参数 Example FROM TableName WHERE Forename LIKE SearchValue OR Surna
  • MVVM 中的命令

    我看过一些教程 人们在他们的代码中创建像 CanExecute 这样的方法 我假设他们这样做是为了帮助读者理解这一切是如何运作的 当我查找 Command 和 ICommand 时 它会将我带到 MSDN 上用于 Windows 应用商店应