从一个登录页面浅淡MVVM(二)

转自http://www.cnblogs.com/Sunpire/archive/2010/12/25/1916933.html

如上图,增加了一个 LoginViewModel.cs 文件,放在 ViewModels 目录中,这个文件就是 LoginPage 的 ViewModel 。

一个 UI 对应一个 ViewModel ,这就是 MVVM 的要求,在 ASP.NET MVC 2 中,便是类似这样的。

下面是这个 ViewModel 的部分代码: 

LoginViewModel.cs的字段与属性

 

在 ViewModel 中,把第一阶段中用到的 User 、ValidationModel 、LoginProxy.LoginServiceClient 全部整合

到了一起,并且增加了 Message 和 IsDone 两个属性,旨在通过 Binding 能在 UI 中呈现出 ViewModel 中的状态变化。

对Message和IsDone的控制

 

同时对UI公开了取得校验码和登录的两个异步方法

对View公开的方法

 

 在 View 部分,Xaml 中的变化不大,只是绑定路径变化了,

如 txtUserName 的从 Text="{Binding UserName... 变为 Text="{Binding Data.UserName...

 

而在 cs 变分,代码明显变少了:

LoginPage.cs

这里通过 LoginViewModel.PropertyChanged 来呈现 ViewModel 中的状态变化,这只是一种示意,

如果你愿意,也可以在 ViewModel 中增加一些 event 等来实现。

 

这里,我拿不定主意的是 btnLogin_Click() 里面的 Validate 代码,该不该把这些代码移入 ViewModel 中,

是不是该让 ViewModel 依赖于 View ?个人觉得 ViewModel 还是不要依赖于 View 的为好。

 

从职责的角度来看,我更偏向于把 Validation 和 Binding 统一看成是在 View 中实现的,但是这样就会在

View 中书写一些代码(或者也许是有办法能在Xaml中指定,但是我还不知道?),尽管如此,在第三阶段中,

还是尝试了把 Validation 看作是 ViewModel 的职责,在 ViewModel 中增加属性,把 Validation 彻底放

在 ViewModel 中 ---- 这样做仅是为了让 View 的代码更少。

 

Silverlight 4.0 为 ButtonBase 控件增加了 Command 依赖项属性,这样可以在 Xaml 中进行更多的绑定,

更彻底的分离 View 和 ViewModel。

 

补充,还有一点,刚刚在其他的博主的文章中看到:

  View Model有以下三个部分组成

  1、属性:一个事物,它的类型可以是一个字符型,也可以是一个对象。实现接口INotifyPropertyChanged,那么任何UI元素绑定到这个属性,不管这个属性什么时候改变都能自动和UI层交互。

  2、集合:事物的集合,它的类型一般是ObservableCollection,因此,任何UI元素绑定到它,不管这个集合什么时候改变,都可以自动的与UI交互。

  3、Commands:一个可以被触发的事件,并且可以传递一个类型为Object的参数。但是前提是要实现接口ICommand。

来自于 http://www.cnblogs.com/888h/archive/2010/12/24/1915214.html

 

我不知道这种描述是不是官方的,如果是,那我这个例子中的 ViewModel 中就没有 集合 了,难道这样就不能作为 ViewModel 了?

对此补充的补充:博主天神一已过来发表了意见,也回答了这个问题,在此对天神一表示感谢!

 

三、MVVM模式,并使用Command

 

时间: 2024-09-20 12:10:33

从一个登录页面浅淡MVVM(二)的相关文章

从一个登录页面浅淡MVVM(一)

转自http://www.cnblogs.com/Sunpire/archive/2010/12/25/1916913.html Silverlight 使用的是 MVVM 模式,可是有多少人在使用 MVVM ?我自己就没有. 在这里,我以一个登录页面为例子,和大家分享讨论一下 Silverlight 开发的一些点滴, 包括 Validation.MVVM 等.   不过要说明的是,我并没有学习过官方关于 MVVM 的文档,这个例子我是从实例中进行重构, 有所感受而写出来的,还是希望各位权威大侠

从一个登录页面浅淡MVVM(三)

转自http://www.cnblogs.com/Sunpire/archive/2010/12/25/1916943.html 在 ViewModels 中增加一个 ViewModelCommand ,通过 Action<Object> 执行实际的方法.   ViewModelCommand.cs     PS:日前,在看有关 Object Value  的用法时,提到了 struct ,struct 是存储在 Heap 上,而引用类型是存储在 Stack 上的,在内存分配及垃圾回收等方面

wpf-WPF MVVM 如何做一个登录页面

问题描述 WPF MVVM 如何做一个登录页面 初学者想做一个登录页面,只是输入账号,在数据库里判断用户是否存在就行,用MVVM写就行,急用 解决方案 http://jingyan.baidu.com/article/d45ad1489336ca69552b803f.htmlhttp://www.silverlightchina.net/html/study/WPF/2013/0216/21847.html

java-在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框

问题描述 在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框 在Android中写一个浏览器,记住密码功能怎么写?大神,请指教. 解决方案 webview加载你的登录页面,登录完了后取cookie或其他认证信息(这个和你登录的网站是如何设计的有关) 解决方案二: 用webview 啊 解决方案三: 用sharedpreference来保存密码或者是账号 解决方案四: 这两个输入框是浏览器的还是网页的?

做一个登录页面 用的是springMVC+mybatis 怎么做?

问题描述 我已经做好了后台的页面一些增删改查也都做好了现在希望做一个顾客版本的首先需要登录进去之后是个人中心请问那个登陆怎么做.ps.已有一个登录这个还有权限方面的问题.小白一个,希望各位大神给我一个思路.愁死了 解决方案 解决方案二:权限方面可以参考rbac:解决方案三:可用springsecurity,你用spring用这个是非常合适的解决方案四:功能表,角色表,用户表,互相关联,通过用户查角色,通过角色查对应的功能,通过功能在页面上显示功能菜单.解决方案五:http://download.

Swift 自动布局库SnapKit的实现一个登录页面使用详解

前面的几篇文章讲解了自动布局库SnapKit的使用方法.本文通过一个完整的样例(登录页面)来演示在实际项目中如何使用SnapKit来实现自动化布局的. 1,效果图如下 2,代码讲解 (1)用户名.密码输入区域(白色区域)设置垂直居中约束,其高度是固定90,宽度自适应(距离屏幕左右侧都为15像素) (2)用户名.密码输入框之间分割线是使用灰色背景的UIView实现,其高度是1像素,同样设置垂直居中约束. (3)登录按钮距离上方输入区域20像素,高度固定是40,宽度同样自适应(距离屏幕左右侧都为15

springmvc-用jsp写一个简单的登录页面

问题描述 用jsp写一个简单的登录页面 求写一个登录页面,有form表单,然后能提交到数据库.框架是spring,数据库是sql,用java,jsp写..我是新手,所以恳求大神帮帮我.非常感谢谢.. 解决方案 form表单里面放输入框组,用于填写数据,像登陆这种涉及隐私的操作,最好使用post方式提交, 在action层,我看到你只提到了spring,那就直接servlet来接收数据进行处理,在doPost中通过request.getParameter(str)获取参数,经过一系列校验之后,就可

[Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文件,css文件. 官方网站:http://jqueryui.com/ 项目结构:   Login.html 引入文件: 1 <link href="Scripts/css/redmond/jquery-ui-1.10.4.custom.css" rel="styleshee

spring security 中,配置登录页面,登录页面的action一定要是j_spring_security_check吗?

问题描述 我自定义了一个登录页面,登录的action也是自己定义的,主要是去数据库验证用户名和密码是否正确.然后把当前用户存在session中.可发现Security 的http配置完后,拥有权限的用户并不能正确进入页面,都被拦截然后重定向到登录页面.因为初次使用security,有没高手给点意见,哪儿出了问题?截取配置片段:<http><form-login login-page="/demo/user/login" login-processing-url=&qu