CozyRSS开发记录19-窗口标题栏交互
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-窗口标题栏交互相关推荐
- CozyRSS开发记录3-标题栏再加强
CozyRSS开发记录3-标题栏再加强 1.更精炼的标题栏 接下来,我们把窗口的边框和默认的标题栏给去掉,让Cozy看起来更像一个平板应用. 在主窗口的属性里,修改下列两个属性: 效果一目了然: 2. ...
- CozyRSS开发记录8-解析一份RSS
CozyRSS开发记录8-解析一份RSS 1.使用Rss20FeedFormatter解析RSS 使用Rss20FeedFormatter配合XmlReader来解析RSS非常的简单,几行搞定: 来试 ...
- mfc 隐藏主窗口 visible_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...
大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第80讲:工作表数据与UserForm窗口的交互过程中:如何对显示的记录进行编辑和保存.在前几讲中,我们实现了将工作表的数据传给UserFor ...
- easyui的textbox实现编辑保存_第80讲:工作表数据与UserForm窗口的交互,记录的编辑和保存...
大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第80讲:工作表数据与UserForm窗口的交互过程中:如何对显示的记录进行编辑和保存.在前几讲中,我们实现了将工作表的数据传给UserFor ...
- wpf 如何实现窗口浮动_如何实现工作表数据与UserForm窗口的交互,显示第一条记录...
大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第77讲:工作表数据与UserForm窗口的交互:第一条记录的显示.从这讲开始,我将利用7讲的时间,给大家详细讲解一个工作表数据库的准实例,虽 ...
- 尚硅谷——谷粒商城项目开发记录——2021.11.19
尚硅谷--谷粒商城项目开发记录--2021.11.19 出现错误 1.SpringBoot测试类出现Could not autowire. No beans of 'BrandService' typ ...
- 软件工程实训——点歌管理系统开发记录
软件工程期末作业--点歌管理系统开发记录 博客 http://blog.csdn.net/kernel_/article/details/49459947 github项目的地址 https://gi ...
- 【WinUI 3】实现自定义标题栏交互控件捕获输入
问题背景描述 Windows为每个窗口提供默认标题栏,并允许自定义它以匹配应用的个性. 默认标题栏附带一些标准组件和核心功能,例如拖动和调整窗口大小. WinUI 3 中的窗口功能是通过基于 Win3 ...
- 2020—开发记录以及知识总结,持续更新
努力工作,好好生活 三月 四月 五月 六月 七月(实际上更新已经是2021年1月28号了...) 三月 因为开发时,项目经理提到使用DTO建立与前台交互用实体,我着手了解一下,然后现学现用. 至于DT ...
最新文章
- Python 列表(List) 取区间元素 [:] 用法
- mysql添加和root用户一样的权限
- Java数组与容器类分析资料--数组、List和Set、Map等
- 关于机器学习的一些感想
- NHibernate 做个小项目来试一下吧 一
- oracle表被锁了怎么处理
- linux查看删除init内容,linux常用命令
- NeurIPS 2021 | 视频压缩框架DCVC:从残差编码到条件编码,建模上下文
- signature=fc89d4352b6699754c14ce282ec75426,Broken chiral symmetry on a null plane
- 91. php 命名空间(1)
- 3D图形学矩阵完全解析傻瓜版
- 查看sql语句执行时间/测试sql语句性能
- Hi3518EV200学习记录之运行mpp/sample/sample_venc(ov9712)
- RE-Base64编码分析
- linux java7 64位_linux jdk1.7 64位tar.gz下载安装配置教程(完美版)
- [学习笔记]韦尔奇.鲍威尔法(Welch Powell)
- ANSYS mesh网格划分
- 积累一些平时制作Excel 表格的常用公式与方法
- Liberal Arts:丧后即燃
- Redis集群——去中心化模式
热门文章
- 如何用计算机声卡,声卡是什么,详细教您怎么查看自己电脑的声卡
- 华为与思科网络产品详细比较
- ajax连mysql数据库_AJAX调用mysql数据库简单例子
- 年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?
- Golang 在阿里集团调度集群管理系统 Sigma 中的实践
- angular 多个片段拼接_10个JavaScript代码片段,帮助你成为更好的开发者
- html表单没有csrf保护,如何在Symfony 1.4中为表单禁用CSRF保护/验证
- linux文件指令 例子,Linux 命令:文件目录操作与实例
- 云存储服务器技术,​云存储技术构架-服务器运维
- 风变编程python 知乎_如何看待风变编程的 Python 网课?