CozyRSS开发记录19-窗口标题栏交互

1、谈谈对mvvm解耦的看法

在使用mvvm时,如何操作窗口,这是一个问题。这个问题的关键点是:mvvm是把view和viewmodel解耦了的,很多写法一不小心又把它们耦合起来了。

那么,view和viewmodel解耦有什么好处,不解偶又有什么坏处呢?我这里也不深入讨论了,只说一个场景:CozyRSS假使要做android版和ios版了,我的model和处理的库肯定是不用改的,那viewmodel需要改吗?

前面说到,mvvmlight是跨平台的,本身是可以在xamarin里用的。那么,理想的情况是,我只需要重写view,修改控件和布局,内容和命令依然是绑定在viewmodel上的。那么问题来了,viewmodel如果依赖了view,那就非改不可了。

举一个这样的例子:

这是SO上某个答主的答案,如何在用mvvm的情况下,实现窗口拖动。这里view并没有什么问题,绑定到命令。接下来看viewmodel:

这里,viewmodel依赖到Window了,换View的时候,非改不可了。

针对这种情况,有几种处理方法:依赖属性、消息...不管哪种方法,总之,就是让viewmodel在不知道view的情况下,通知view做点事情。我用了另外一种取巧的方法,提供一些Actions类,Actions会依赖view,而viewmodel依赖Actions。虽然viewmodel依然多了依赖,但是移植时,只需要考虑到这些需要修改的Actions,而不用动viewmodel,而需要修改的依赖view的Actions是很少的。

2、Actions

我们需要让标题栏支持:窗口拖动、双击最大化。对应的代码很简单:

然后让viewmodel依赖这些Actions,而不依赖view:

3、绑定事件

最后,我们用EventTrigger来绑定下两个事件:

至此,窗口标题栏支持拖动和双击最大化就完成了。

转载于:https://www.cnblogs.com/zapline/p/5526795.html

CozyRSS开发记录19-窗口标题栏交互相关推荐

  1. CozyRSS开发记录3-标题栏再加强

    CozyRSS开发记录3-标题栏再加强 1.更精炼的标题栏 接下来,我们把窗口的边框和默认的标题栏给去掉,让Cozy看起来更像一个平板应用. 在主窗口的属性里,修改下列两个属性: 效果一目了然: 2. ...

  2. CozyRSS开发记录8-解析一份RSS

    CozyRSS开发记录8-解析一份RSS 1.使用Rss20FeedFormatter解析RSS 使用Rss20FeedFormatter配合XmlReader来解析RSS非常的简单,几行搞定: 来试 ...

  3. mfc 隐藏主窗口 visible_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...

    大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第80讲:工作表数据与UserForm窗口的交互过程中:如何对显示的记录进行编辑和保存.在前几讲中,我们实现了将工作表的数据传给UserFor ...

  4. easyui的textbox实现编辑保存_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...

    大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第80讲:工作表数据与UserForm窗口的交互过程中:如何对显示的记录进行编辑和保存.在前几讲中,我们实现了将工作表的数据传给UserFor ...

  5. wpf 如何实现窗口浮动_如何实现工作表数据与UserForm窗口的交互,显示第一条记录...

    大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第77讲:工作表数据与UserForm窗口的交互:第一条记录的显示.从这讲开始,我将利用7讲的时间,给大家详细讲解一个工作表数据库的准实例,虽 ...

  6. 尚硅谷——谷粒商城项目开发记录——2021.11.19

    尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...

  7. 软件工程实训——点歌管理系统开发记录

    软件工程期末作业--点歌管理系统开发记录 博客 http://blog.csdn.net/kernel_/article/details/49459947 github项目的地址 https://gi ...

  8. 【WinUI 3】实现自定义标题栏交互控件捕获输入

    问题背景描述 Windows为每个窗口提供默认标题栏,并允许自定义它以匹配应用的个性. 默认标题栏附带一些标准组件和核心功能,例如拖动和调整窗口大小. WinUI 3 中的窗口功能是通过基于 Win3 ...

  9. 2020—开发记录以及知识总结,持续更新

    努力工作,好好生活 三月 四月 五月 六月 七月(实际上更新已经是2021年1月28号了...) 三月 因为开发时,项目经理提到使用DTO建立与前台交互用实体,我着手了解一下,然后现学现用. 至于DT ...

最新文章

  1. Python 列表(List) 取区间元素 [:] 用法
  2. mysql添加和root用户一样的权限
  3. Java数组与容器类分析资料--数组、List和Set、Map等
  4. 关于机器学习的一些感想
  5. NHibernate 做个小项目来试一下吧 一
  6. oracle表被锁了怎么处理
  7. linux查看删除init内容,linux常用命令
  8. NeurIPS 2021 | 视频压缩框架DCVC:从残差编码到条件编码,建模上下文
  9. signature=fc89d4352b6699754c14ce282ec75426,Broken chiral symmetry on a null plane
  10. 91. php 命名空间(1)
  11. 3D图形学矩阵完全解析傻瓜版
  12. 查看sql语句执行时间/测试sql语句性能
  13. Hi3518EV200学习记录之运行mpp/sample/sample_venc(ov9712)
  14. RE-Base64编码分析
  15. linux java7 64位_linux jdk1.7 64位tar.gz下载安装配置教程(完美版)
  16. [学习笔记]韦尔奇.鲍威尔法(Welch Powell)
  17. ANSYS mesh网格划分
  18. 积累一些平时制作Excel 表格的常用公式与方法
  19. Liberal Arts:丧后即燃
  20. Redis集群——去中心化模式

热门文章

  1. 如何用计算机声卡,声卡是什么,详细教您怎么查看自己电脑的声卡
  2. 华为与思科网络产品详细比较
  3. ajax连mysql数据库_AJAX调用mysql数据库简单例子
  4. 年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?
  5. Golang 在阿里集团调度集群管理系统 Sigma 中的实践
  6. angular 多个片段拼接_10个JavaScript代码片段,帮助你成为更好的开发者
  7. html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
  8. linux文件指令 例子,Linux 命令:文件目录操作与实例
  9. 云存储服务器技术,​云存储技术构架-服务器运维
  10. 风变编程python 知乎_如何看待风变编程的 Python 网课?