Telerik的控件很强大。我们直接使用其登陆模板。

在装过Telerik WP版后,就可以在VS里非常方便的添加页面了。

我们选择 Sign In Form

其XAML不是很长,直接贴出来

 <telerikInput:RadDataForm Grid.Row="1" Margin="12,48,12,0" x:Name="DataForm">
<telerikInput:RadDataForm.CurrentItem>
<models:SignInDataModel/>
</telerikInput:RadDataForm.CurrentItem>
<Grid>
<telerikInput:DataField Header="" TargetProperty="UserName">
<telerikInput:DataField.EditorStyles>
<Style TargetType="telerikPrimitives:RadTextBox">
<Setter Property="Watermark" Value="username or email"/>
</Style>
</telerikInput:DataField.EditorStyles>
<telerikInput:DataField.Validators>
<telerikInput:NonEmptyStringValidator/>
</telerikInput:DataField.Validators>
</telerikInput:DataField>
<telerikInput:DataField Header="" TargetProperty="Password" telerikDataForm:PasswordField.IsPasswordField="True">
<telerikInput:DataField.EditorStyles>
<Style TargetType="telerikPrimitives:RadPasswordBox">
<Setter Property="Watermark" Value="password"/>
</Style>
</telerikInput:DataField.EditorStyles>
<telerikInput:DataField.Validators>
<telerikInput:NonEmptyStringValidator/>
</telerikInput:DataField.Validators>
</telerikInput:DataField>
</Grid>
27 </telerikInput:RadDataForm>

XAML非常简单简洁,一看就懂,要想加验证也非常容易。

下面的登陆按钮直接将DataForm传至后台

   <Button Grid.Row="2" Content="sign in" Margin="12" CommandParameter="{Binding ElementName=DataForm}"
Command="{StaticResource DataFormCommitCommand}" />

下面用这个控件来做我们的DoubanFm的登陆。

还是使用MVVMlight,为登陆页面建立一个VM,别忘了在Locator中注册VM。

在VM中暴露一个UserModel属性给View

       public const string UserModelPropertyName = "UserModel";
private User usermodel = new User();
public User UserModel
{
get
{
return usermodel;
} set
{
if (usermodel == value)
{
return;
} RaisePropertyChanging(UserModelPropertyName);
usermodel = value;
RaisePropertyChanged(UserModelPropertyName);
}
}

再为登陆按钮设置一个Command,如下:

     private RelayCommand<RadDataForm> logincommand;
/// <summary>
/// Gets the LoginCommand.
/// </summary>
public RelayCommand<RadDataForm> LoginCommand
{
get
{
return logincommand
?? (logincommand = new RelayCommand<RadDataForm>(
(dataform) =>
{
dataform.Commit();//这样值就到UserModel了
User user=dataform.CurrentItem as User;
Debug.WriteLine(user.Username);
Debug.WriteLine(user.PassWord); }));
}
}

再结合上一篇Rx,我们可以实现DoubanFm的登陆了。

实现起来为了不破坏原先代码的结构,我们把负责Post的Rx利用SimpleIoc注入到早就写好的HttpRequestService类中。

    MyRxPostMethodService RxService;
public HttpRequestService(MyRxPostMethodService rx)
{
RxService = rx; }

MyRxPostMethodService 就是上篇的HTTPREQUEST类

再对Post包装一下

    public IObservable<string> Post(string URL, string PostData)
{
return RxService.PostMethod(URL, PostData); }

最后再把HttpRequestService注入到LoginVm中

    private IHttpRequest _httprequest;
public LoginViewModel(IHttpRequest http)
{
_httprequest = http;
}

再将Command改为

  public RelayCommand<RadDataForm> LoginCommand
{
get
{
return logincommand
?? (logincommand = new RelayCommand<RadDataForm>(
(dataform) =>
{
dataform.Commit();//这样值就到UserModel了
User user=dataform.CurrentItem as User;
string username = user.Username;
string password = user.PassWord;
_httprequest.Post("http://www.douban.com/j/app/login", "app_name=radio_desktop_win&version=100&email=" + username + "&password=" + password).Subscribe(this.OnLoginStatusChanged); }));
}
}

到这里基本大功告成。

使用Telerik的登陆模板实现DoubanFm的登陆(WP7)的更多相关文章

  1. 命令行登陆Oracle(包括远程登陆)

    本方法适用于在cmd命令行窗口以及pl/sql登陆Oracle下登录本机或者远程Oracle. 1.首先保证在当前主机上设置了ORACLE_HOME环境变量:     例如:ORACLE_HOME=D ...

  2. ubuntu登陆后一闪回到登陆界面

    ubuntu登陆后一闪回到登陆界面   最后发现居然是我的环境变量配置问题........   解决方法:   先CTRL+ALT+F1   root进去, 查看nickleo用户为什么登录失败 ca ...

  3. php同一个用户同时只能登陆一个, 后登陆者踢掉前登陆者(排他登陆)

    通常用户登陆,如果没有特别的限定, 同一个用户可以同时登陆, 今天搞了一个东西限定一个用户不能同时登陆到一个系统上, 后登陆者会把前面登陆的踢出来.(有点像QQ,同个帐号不能在多个地方同时在线, 后面 ...

  4. ssh登陆强制使用密码验证登陆

    Linux系统使用ssh进行登陆,可以采用密码登陆和秘钥登陆.采用密码登陆每次需要输入密码进行验证,验证通过则可登陆到环境. 秘钥登陆为在服务器的客户端生成相应的公钥和私钥,公钥用于加密,私钥用于解密 ...

  5. PHP 登陆失效之后,重新登陆,跳转到失效前界面

    登陆失效之后,需要重新进行登陆,登陆之后,进入到默认首页,如果需要继续之前的进行操作,必须重新点击菜单进行跳转,体验不太好 登陆的时候,将之前的url,拼接到登陆界面的url上作为一个redirect ...

  6. 使用RX方式模拟DoubanFm的登陆

    WP7下的Get Post都是异步的 关于RX http://www.cnblogs.com/yangecnu/archive/2012/11/03/Introducting_ReactiveExte ...

  7. SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆

    在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...

  8. Spring py登陆模块(包含 记录登陆时间,记录ip,增加积分)

    嘛基于最近的复习准备写个关于spring登陆模块的小程序 虽然小但是五脏俱全呐 话不多说让我来介绍一下今天的登陆程序. 这些是 基于Spring JDBC 的持久层实现 基于Spring 声明事物的业 ...

  9. 网站第三方登陆(一) QQ登陆

    QQ 登陆是指,通过qq的用户名和密码,登录网站,不需要注册,网站的用户名和密码.如下图 一旦你授权了,就可以进入网站了,要实现这个效果 1.去qq互联平台(http://connect.qq.com ...

随机推荐

  1. CALayer 简单操作和实际应用

    1.CALayer //每一个UIView,都存在一个CALayer.(主层) //CALayer的功能 描边,圆角,阴影... //CALayer 属于QuartzCore绘图框架 //明明有UIC ...

  2. 解决Elementary OS和Windows时间不一致

    解决方案一:把Windows从硬件时间修改成修改成UTC时间,管理员身份运行 Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInforma ...

  3. 设置UITableView背景透明/监听cell左边的删除按钮的点击事件

    _tableView = [[UITableView alloc] init]; _tableView.delegate = self; _tableView.dataSource = self; _ ...

  4. Bootstrap,导航栏点击效果修复(补)

    前言: 昨天晚上休息,忘记发博客了.对于学习这件是,还是需要坚持的.想想自建一个Jekyll博客模版还是很兴奋的,话不多说,看正文吧! 关于开发:  先看个Demo吧,点这里.你会发现,点击是没有效果 ...

  5. 【CSS3】---阴影 box-shadow

    box-shadow是向盒子添加阴影.支持添加一个或者多个.实现了投影效果 语法: box-shadow: X轴偏移量 Y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式] 参数 ...

  6. 【转载】Deep Learning(深度学习)学习笔记整理

    http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...

  7. codevs1011 数的计算 2001年NOIP全国联赛普及组

    题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.          不 ...

  8. [Android开发系列]IT博客应用V1.3

    首先,感谢使用这款软件并给我意见的朋友们,有你们的意见,才有了这个版本. 其次,检索功能和分类筛选功能(如果是你提的意见,记得在下面mark哦,毕竟读代码你能发现,其实发意见这个就是用自己的邮箱给自己 ...

  9. C# 关于委托和事件的妙文

    C# 关于委托和事件的妙文: 通过一个例子详细介绍委托和事件的作用:Observer模式简介 转自:http://blog.csdn.net/susan19890313/article/details ...

  10. OC5_Block

    // // main.m // OC5_Block // // Created by zhangxueming on 15/6/26. // Copyright (c) 2015年 zhangxuem ...