如何避免 ViewModel 中的命令混乱?

2023-11-24

我正在构建一个使用相当多命令的应用程序,它们使我的视图模型变得混乱。 MVVM 对我来说是新的,如果这个问题有点愚蠢,我很抱歉。有没有办法减少混乱?例如,在这里您可以看到杂乱的一部分。

    private void InitializeCommands()
    {
        LogoutCommand = new RelayCommand(Logout);
        OpenCommand = new RelayCommand(SetImage);
        SaveCommand = new RelayCommand(SaveImage, SaveImageCanExecute);
        UploadToFlickrCommand = new RelayCommand(UploadToFlickr);
        CropCommand = new RelayCommand(SetCropMouseEvents);
        RemoveRedEyeCommand = new RelayCommand(SetRemoveRedEyeMouseEvents);
        TextInputCropCommand = new RelayCommand(CropFromText);
        ReloadImageCommand = new RelayCommand(ReloadImage);
        FlipYCommand = new RelayCommand(FlipY);
        Rotate90RCommand = new RelayCommand(Rotate90R);
        FlipXCommand = new RelayCommand(FlipX);
        ToGrayscaleCommand = new RelayCommand(ToGrayscale);
        ToSepiaCommand = new RelayCommand(ToSepia);
        WindowClosingCommand = new RelayCommand(WindowClosing);
        EffectsViewCommand = new RelayCommand(() => CurrentToolView = new EffectsView());
        AddTextCommand = new RelayCommand(() => CurrentToolView = new AddTextView());
        ResizeCommand = new RelayCommand(() => CurrentToolView = new ResizeView());
        CropViewCommand = new RelayCommand(() => CurrentToolView = new CropView());
        RedEyeCommand = new RelayCommand(() => CurrentToolView = new RedEyeView());
        RotateViewCommand = new RelayCommand(() => CurrentToolView = new RotateView());
        ExitCommand = new RelayCommand(() => Application.Current.Shutdown());
        FullscreenCommand = new RelayCommand(() =>
                                                 {
                                                     var fs = new FullscreenView
                                                                  {FullscreenImage = CurrentImage.LoadedImage};
                                                     fs.Show();
                                                 });
        HandleDropCommand = new RelayCommand<DragEventArgs>(e => OnFileDrop(this, e));
        Messenger.Default.Register<User>(this, "UserLogin", SetUser);
        Messenger.Default.Register<FlickrAccount>(this, "AddedAccount", AddAccount);
        Messenger.Default.Register<string>(this, "INeedAUser", SendUser);
        Messenger.Default.Register<string>(this, "INeedAImage", SendImage);
    }

所以你有以下命令:

  1. 文件操作(打开、保存、上传至 Flicker)

  2. 窗口操作(全屏、关闭)

  3. 编辑(旋转、调整大小、颜色等)

考虑将相关命令分组(组合)到一个自定义类中,例如 FileCommands。如果适用,创建多级层次结构。如果您的视图中有分层菜单,您可能需要类似的命令层次结构。

然后,创建一个控制器每个命令组(例如 FileController)和控制器创建方法中,该方法将使用关联服务注册来自 FileCommands 组的命令。

See http://waf.codeplex.com/示例应用程序(例如 BookController.cs),了解有关如何实际实现 Controller/ViewModel 映射的一些想法。但请注意,这不是完全相同的场景(没有将命令分成组)。

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

如何避免 ViewModel 中的命令混乱? 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 重载<<的返回值

    include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何获取 Vue 更新钩子中的更改?

    如果我有一个像这样的 Vue 组件 有没有办法获得导致更新的更改 就像如何watch钩子接受前一个和下一个数据的参数吗 watch someProp next prev you can compare states here React 似
  • Document.getElementById() 返回名称等于指定 id 的元素

    我之前曾在this SO关于 IE6 7 以及某些版本的 Opera 的有趣行为document getElementById可以找到一个元素 其name属性已定义 但未定义id属性 使得 function f document getEl
  • Angular Universal - 排除路线

    是否可以对某些路线不使用角度通用 我想对我的静态页面使用角度通用 当我登录我的应用程序时 我不想使用它 我想用 app 排除路由 请问我该怎么做 非常感谢 这是我的 server ts These are important and nee
  • Raspberry Pi 上的 crontab 无法播放音频

    我正在尝试让我的 Raspberry Pi 当前连接到蓝牙扬声器 以便每天按计划播放音频文件 其中我的cron工作正在更新中 daily获得新的时间 这基本上是祈祷的召唤 crontab l daily home pi athan upda
  • 来电屏幕上的活动弹出窗口

    我正在尝试覆盖来电屏幕 我知道我无法更改它 所以我正在尝试在顶部弹出一个活动 我的代码工作正常 除非手机闲置了几分钟 My code AndroidManifest xml
  • 将两个或多个 Crystal Reports 合并为一个 PDF

    我有一个复选框列表 如果我选择两个或多个值 则 CheckBoxList SelectedValues 将作为参数一一传递 并且我想为每个 SelectedValue 生成 PDF 格式的 Crystal Report 并且我想将所有 Cr
  • onDestroy之后是否可以调用回调方法?

    在我的应用程序的最新版本中 一些用户遇到了我无法重现的崩溃 目前仅Samsung设备运行Lollipop遇到这个问题 但这可能只是巧合 在分析了堆栈跟踪和相关代码之后 我想我可能已经找到了罪魁祸首 为了测试我的假设 我将代码简化为下面的代码
  • 编写供国际使用的软件的最佳实践 (i18n)

    我正在寻求编写过国际通用软件的专家的意见 我想了解人们在每个逻辑软件层 数据 rdbms 业务 中间件 用户界面 所采用的最佳实践 谢谢你提供的所有帮助 Data 当您使用 UTF 8 时 请做好每个字符最多占用 3 个字节的准备 对于中文
  • 在 PyQt 中启动 new QThread() 时传递参数

    我有一个用 Python 编写的多线程应用程序 其中一个线程 照顾 GUI 另一个线程是工作线程 但是 工作线程有两个主要函数 或者说两个主要作业 我需要告诉运行函数到底要执行哪个作业 所以我的想法是在工作线程中创建一个运行函数 该函数将采
  • 如何从命令行获取 CSRF 令牌?

    我经常使用测试我的应用程序curl过去我不得不简单地用以下内容来概括我的观点csrf exempt 我真的不想这样做 因为我有一种讨厌的感觉 我会忘记在部署中这样做并享受一生的 CSRF 地狱 有没有办法让我使用 Django 的 shel
  • gnu 排序的意外结果

    当我尝试对以下文本文件 输入 进行排序时 test1 3 test3 2 test 4 用命令 sort input 输出正是输入 这是输出 od bc input 0000000 164 145 163 164 061 011 063 0
  • 以 2 的补码表示十六进制值

    我有一个字符串十六进制值 我需要用 2 的补码来表达它 string hx FF00 我所做的是将其转换为二进制 string h Convert ToString Convert ToInt32 hx 16 2 然后反转它 但我无法使用N
  • HttpContext.Current.User!= HttpContext.User?

    Is HttpContext Current User在全局 asax 中不一样HttpContext User在行动方法中 我为用户分配了一些角色 但他们似乎迷失了 下面的代码显示了正在发生的情况 当用户登录时 两个断言都会被命中 首先是
  • 在组件编辑器中获取字段的_当前_值? (Tridion 2011 SP1)

    我正在编写 保存 命令的扩展 基本上我想验证某些字段并显示一个弹出窗口 允许编辑器根据当前日期 发布号和一些其他属性选择给定的关键字或其他值 我以为我取得了很好的进步 直到我最终发现 display getItem 返回存储在 CM 中的项
  • 如何获取传递给函数的变量的名称?

    让我用下面的例子来解释我的问题 public string ExampleFunction string Variable return something string WhatIsMyName Hello World string He
  • 从 Jupyter 笔记本中删除空行

    有没有一种简单的方法可以从 IPython 笔记本中删除空行 我在网络开发中养成了留空行的习惯 而且我的手指往往会自动按回车键 这使得 IPython 笔记本变得更少 因为占用了我的 14 英寸屏幕的太多空间 并且在大多数情况下并不更具可读
  • 仅当参数不是常量时,math.h 中的 sqrt 才会导致链接器错误“未定义对 sqrt 的引用”

    我创建了一个小程序 如下 include
  • android 以编程方式清除日志

    我想在按下按钮来分析我们应用程序的某些部分 计算一些内容 后获取整个日志 Log d 我可以通过以下代码来做到这一点 HashMap
  • Google 容器引擎中的自动缩放

    据我了解 容器引擎目前处于 alpha 阶段 尚未完成 从文档中我假设 Pod 还没有自动缩放 例如 取决于 CPU 负载 对吗 我希望能够配置一个复制控制器 以便在平均 CPU 负载达到定义的阈值时自动添加 Pod 和 VM 实例 这是近
  • 如何避免 ViewModel 中的命令混乱?

    我正在构建一个使用相当多命令的应用程序 它们使我的视图模型变得混乱 MVVM 对我来说是新的 如果这个问题有点愚蠢 我很抱歉 有没有办法减少混乱 例如 在这里您可以看到杂乱的一部分 private void InitializeComman