码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-25 14:50:48      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

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

1、谈谈对mvvm解耦的看法

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

那么,viewviewmodel解耦有什么好处,不解偶又有什么坏处呢?我这里也不深入讨论了,只说一个场景: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,而需要修改的依赖viewActions是很少的。

2、Actions

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

 技术分享

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

 技术分享

3、绑定事件

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

 技术分享

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

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

标签:

原文地址:http://www.cnblogs.com/zapline/p/5526795.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!