使用 MVVM 时将事件放在哪里?

2024-04-07

我应该将所有事件放在视图代码后面还是有更合适的方法,例如将命令放在 ViewModel 中? 例如,我想在双击数据网格行时打开选项卡,我应该在哪里处理这个事件?


不,你不应该将事件放在代码后面。在MVVM(模型-视图-视图模型)设计模式中,视图模型是负责处理应用程序的表示逻辑和状态的组件。这意味着视图的代码隐藏文件不应包含任何代码来处理从任何用户界面 (UI) 元素引发的事件。

例如,如果您的 xaml 中有按钮

<Button Content="OK" Click="btn_Click"/>
protected void btn_Click(object sender, RoutedEventArgs e)
{
   /* This is not MVVM! */
}

相反,你可以使用WPF命令 http://www.wpftutorial.net/delegatecommand.html您所要做的就是绑定到其 Execute 和 CanExecute 委托并调用您的命令。

所以你的代码现在将是

public class ViewModel
{
    private readonly DelegateCommand<string> _clickCommand;

    public ViewModel()
    {
         _clickCommand = new DelegateCommand(
        (s) => { /* perform some action */ }, //Execute
        null
    } //CanExecute );

    public DelegateCommand ButtonClickCommand
    {
       get { return _clickCommand; }
    }
}
<Button Content="COOL" Command="ButtonClickCommand"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVVM 时将事件放在哪里? 的相关文章

  • 根据项目类型和视图选项切换 ListBox ItemTemplate

    我目前正在 WPF 中实现一个列表框 其项目有 2 个替代布局 到目前为止 我已经使用了DataTrigger切换ItemTemplate为了ListBox并且运行良好
  • 如何将用户控件的属性绑定到 WPF 中同一控件的属性?

    在我的用户控件中 我有一个收款电话解决方案 public List
  • WPF 中与 ControlPaint.Light 等效的是什么?

    与 ControlPaint Light 等效的 wpf 是什么 http msdn microsoft com en us library 3wz9t9fy 28VS 80 29 aspx http msdn microsoft com
  • WPF 通知获取属性的 PropertyChanged

    我有INotifyPropertyChanged实施使用CallerMemberName public event PropertyChangedEventHandler PropertyChanged protected virtual
  • 在 WPF 中处理第二个 UI 线程

    我有一个长时间运行的进程在我的 UI 线程上运行 我无法离开 UI 线程 相反 我尝试创建第二个具有等待动画的 UI 线程 这是我用来创建第二个 UI 线程的代码 Private busyThread As Thread Private w
  • 如果在构造函数中初始化该属性,则似乎不会设置 XAML 绑定

    当属性在构造函数内初始化时 我遇到了控件模板内数据绑定的问题 这是展示案例 您也可以下载样品溶液 http www filehosting org file details 75794 WpfApplication5 zip 自定义控件1
  • WPF 按钮单击事件不起作用

    我有一个按钮 其中包含网格内的图像 我的问题是我无法制作该按钮Click活动工作 我的 XAML 代码
  • WPF TreeView 绑定[重复]

    这个问题在这里已经有答案了 我有一个带有父级和子级属性的课程 ADO NET 实体框架分层页面类 http img148 imageshack us img148 6802 edmxxe8 gif http img148 imageshac
  • WPF 中 ToggleButton 的 IsChecked 属性的 OneWay 绑定

    我有一个ToggleButton以其IsChecked使用 OneWay 绑定将属性绑定到属性
  • 强制窗口在打开时获得焦点

    我有一个 WPF 应用程序 它通过套接字连接与 C MFC 应用程序进行通信 如果用户按下 C 应用程序中的特定按钮 则会显示一个新的 WPF 窗口 以下是调用以启动 WPF 窗口的代码 var window new Window wind
  • WPF 中的数据绑定?

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

    我有一组按钮 只要单击其中一个按钮即可启用 而单击的按钮则被禁用
  • WPF;单击 ListView 中的空白区域时如何取消选择所有选定的项目

    当我有几个 甚至一个 selected items我按简单click在我的空白处ListView 空白 非行 我想取消选择所有选定的项目 这是我取消选择所有项目的功能 private void DeselectAllListViewItem
  • 如何从页面级别获取父框架?

    我有一个带有框架和几页的窗口 加载窗口时 框架导航到欢迎页面 当我单击欢迎页面内的按钮时 我希望父框架导航到另一个页面 为此 我需要从页面级别访问父框架 但我不知道如何执行此操作 我尝试了下面的代码 但它返回 null private vo
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • 转换BitmapImage后内存未释放

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

    我有一个使用 MVVM 模式的 WPF 应用程序 将按钮连接到 VM 非常简单 因为它们实现了 ICommand 我有一个工作原理类似的上下文菜单 下一步是为上下文菜单创建快捷键 我不知道如何让快捷键调用命令 这是一个例子
  • 获取代码中的绑定结果

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

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu

随机推荐

  • Linux 如何知道何时为调用堆栈分配更多页面?

    鉴于以下程序 segfault 顾名思义 将通过访问堆栈下方的 256k 来使程序出现段错误 nofault 然而 逐渐将堆栈推到下方 1m 但永远不会出现段错误 此外 运行segfault after nofault 也不会导致错误 如果
  • Sphinx 文档中使用全局变量标准化链接

    我正在使用 Sphinx 来记录工作项目 我想在整个文档的多个页面上使用指向下载的相同链接 例如 home rst Hi I want you to download my project download blah com downloa
  • Dagster 循环实体的输出和并发处理

    我有一个由两个固体组成的 Dagster 管道 下面是可重现的示例 首先 return some list 输出一些对象的列表 第二个固体 print num 接受第一个列表 不是完整列表 中的元素 并对该元素进行一些处理 我该如何为第一个
  • Rails 视图显示双花括号中的格式输入,例如 {{parameter}} 而不是实际值

    我在使用 Rails 2 3 8 执行以下功能时收到此错误 单词时间距离 shows 还剩 count 天 以及表格错误 Restful 身份验证登录显示无效表单的错误 如下所示 count 个错误禁止保存此 model 以下字段存在问题
  • 更快地循环图像的方法

    有谁知道如何更快地完成这项工作 我可以使用 Lockbits 做同样的事情吗 for int y 0 y lt picture Height y for int x 0 x lt picture Width x Color colorPix
  • 散点图中点的垂直线

    假设我有一组点x以及一组对应的数据y 我现在将这些绘制成散点图 plt scatter x y 我得到的图包含一些由 matplotlib 生成的 x 轴刻度 有没有一种方法可以实现自动勾选 但要添加从 x 轴到散点中的点的垂直线并标记它们
  • 在 Nuget 的构建后获取版本

    Code if ConfigurationName Release cd ProjectDir nuget spec Entities f nuget pack DeusPak Entities csproj Prop Configurat
  • Eclipse 图形布局不显示任何内容

    I am doing a mobile application on Eclipse and once I re installed my Android SDK after installation something odd happe
  • Twitter Bootstrap:使表单输入和按钮与 Chrome 和 Firefox 中的高度相同

    Using Twitter 引导程序 2 3 2 http twitter github io bootstrap base css html forms我有一个input append form
  • 操作栏溢出不显示

    我正在为 Sherlock 设置一个带有 3 个项目 图标的操作栏 在 ICS 模拟器上运行时 我只能看到 2 个图标 而且 没有溢出菜单 那三个点图标 如果我按手机的菜单按钮 我只会看到第三个图标 我是否必须强制使用溢出图标 如果是的话我
  • 如何在 Objective-C 中包装 C++ 库?

    我有一个 C 库 仅限 h 其中包含数据结构的实现 我想在我的 iPhone 应用程序中使用它 首先 我用 Objective C 编写了一个包装器作为一个类 通过组合 它具有 C 类的 ivar 然后我 有义务 将包装类扩展更改为 mm
  • Angular 的过滤器问题

    明确地说 我对 Angular 上的过滤器有一个大的小问题 附加过滤器的输入搜索 如果你看到这个例子 这正是我想要的 http plnkr co edit FJ45nV6gdwp3SkRglPeW p preview 实际上 我用我的应用程
  • 使用自然键的 Django loaddata 未查询正确的外键

    这是我的问题 我正在尝试加载一些与另一个模型具有自然键关系的数据 我修改了父模型以生成自然键 我使用以下命令从旧数据库导出数据 manage py dumpdata resources image n indent 4 gt images
  • 如何使用 Python 与 ChatGPT 聊天?

    我要求 ChatGPT 向我展示如何使用 OpenAi 的 API 在终端窗口中与其进行交互 它生成了代码 我对其进行了一些修改 以便完成我想要的操作 这是Python代码 import requests with open api key
  • 将 cellpadding 添加到 Java JTable

    我正在尝试实现 Swing JTable 我按照教程进行操作http docs oracle com javase tutorial uiswing components table html simple http docs oracle
  • 如何使用 RequireJS 构建多个页面

    如何使用RequireJS构建多个页面 就像下面的示例一样 在 app js 中声明每个类是正确的做法吗 有每个 html 文件来声明 我想避免的是当用户到达网站的第一页时加载所有脚本 main js 定义所有外部依赖项 require b
  • 如何为图像中的每个对象着色不同的颜色

    我遇到以下问题 我有黑白图像 我必须对其进行着色 图像中的每个白色 斑点 代表一个对象的实例 我想用新颜色为每个对象着色 但对于每个图像我想使用相同的颜色方案 例如 第一张图片 3 个对象 gt 使用的颜色 红色 绿色 黄色 第二张图片 2
  • Android SDK 管理器未安装组件

    不确定我在这里做错了什么 我安装了 Android SDK Manager 现在正在尝试安装 Android Dev 网站建议的平台 单击安装后 我收到一条错误消息 指出管理器无法在 Android 目录中创建临时文件夹 所以我创造了它 现
  • 创建一个用于切换 jQuery 选项卡的“下一步”按钮

    如何创建一个滚动到下一个 jQuery 选项卡的按钮 我希望选项卡中有一个下一个按钮 可以滚动到下一个选项卡 有点像分步教程 如何才能做到这一点 到目前为止我的代码如下 HTML div ul li a href fragment 1 sp
  • 使用 MVVM 时将事件放在哪里?

    我应该将所有事件放在视图代码后面还是有更合适的方法 例如将命令放在 ViewModel 中 例如 我想在双击数据网格行时打开选项卡 我应该在哪里处理这个事件 不 你不应该将事件放在代码后面 在MVVM 模型 视图 视图模型 设计模式中 视图