在MVVM模式中关闭窗体

来源:互联网 发布:淘宝店铺增加粉丝数量 编辑:程序博客网 时间:2024/04/26 01:39

这一篇和ArcGIS没什么关系的哈, 主要是在写ArcMap AddIn的时候具体遇到这个问题. MVVM是什么样的一个套路, 这里就不在多说了, 在MVVM中处理窗口时间确实很麻烦, 最早我是这样处理的

image

就是command和click事件都进行处理, 当然,这样破环了mvvm, 不过真是coding起来, 也不用想太多, 其实也没什么太大的问题, 功能实现是最主要的

 

但是这样有个问题, click的处理函数不好复用, 如果我有多个地方, 也不一定是按钮, 需要关联上关闭窗体的功能, 这个方法就有点尴尬了, 因为close的逻辑会发生重复, 而重复是很不好的

 

面对这个问题可以这样解决, 2个方法, 都可以, 一个是通过事件, 在vm中增加一个eventhandler, 在构建vm的时候设置 监听这个event, 代码如下

image

image

 

这个方法是可行的, 第2个方法是在vm上留一个Action的属性, 同样在构建vm的时候设置这个Action为close的逻辑, 这也和事件的方法有点类似, 手法不同而已

image

image

 

这两个方法都还是不错的. 但多多少少都会让MVVM变得有点不是很纯正

 

如果走特别MVVM的路子, 可以参考大部分的MVVM框架, 如CM Catel 等, 反正目前MVVM的框架简直不要太多了, 这些框架中一般都会有个IUIVisualiztion一类的接口, 由这个接口负责显示窗体和关闭窗体, 如果我们要在自己的代码中利用这种手法, 不得不多, 需要写很多基础代码, 而如果要在AddIn的开发中, 利用这些MVVM框架, 虽然确实是可行的, 但一来不是特别完美, 二来似乎有点重, 总之, 对于目前AddIn的开发复杂度, WPF+MVVM的模式是应当用的, 因为真的比Form省很多力气, 但是也不必拘泥于理论, 功能的实现才是最重要的

0 0
原创粉丝点击