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. Linux+Apache+Php+Oracle 基础环境搭建

    前言:                       不能保证100%一次通过,每个系统都会或多或少有区别,如果缺少某些依赖包的话,还请见谅   1.安装Apache需要编译安装的包,各官方网站下载   ...

  2. cordova在app内部指定浏览器打开链接插件:cordova-plugin-inappbrowser

    原文网址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-plugin-inappbrowser/ 要想App里边的 ...

  3. Hbse的读写过程

    1.Hbase的读取过程. 以读取test_region表,row key为this is row value 400000为例. 1: 到zookeeper中去读取/hbase/root-regio ...

  4. Linux 内核模块可选信号

    一 . 内核模块可选信号 1 . 模块申明 (1). MODULE_LICENSE(遵守的协议) 申明该模块遵守的许可证协议,如:“GPL”."GPL V2" (2). MODUL ...

  5. GetImage

    check路径是是否有效,网络访问地址.notfound查找不到,httpstatuscode枚举数较多,根据自己想要的设置就好了. public bool checkValid(string pat ...

  6. NodeJS学习之文件操作

    NodeJS -- 文件操作 Buffer(数据块) JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作 ...

  7. javaShop的一些总结

    主要参考 pdf 找到对应的文件吧,具体怎么制作一个挂件 还没有理解里面的思路,就没有研究了,改一个商城项目遇到了,也只有慢慢解决 加油! CSDN下载地址:http://download.csdn. ...

  8. Table of Contents - 设计模式

    设计原则 OCP - 开闭原则 SRP - 单一职责原则 DIP - 依赖倒置原则 ISP - 接口隔离原则 LSP - 里氏替换原则 LoD - 迪米特法则 创建型模式 工厂方法模式 抽象工厂模式 ...

  9. 【转载】理解OAuth 2.0

    http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 作者: 阮一峰 日期: 2014年5月12日 OAuth是一个关于授权(authorizat ...

  10. C#this关键字用法

    用法一 this关键字的作用是解决当传入参数的名称和数据字段的名称,类型完全相同时产生的作用于歧义,一般情况下我们应该避免产生重名的习惯 先来演示下: class Airplane { public ...