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. 安卓Design包之CollapsingToolbarLayout(可折叠的工具栏布局)的简单使用

    转自: CollapsingToolbarLayout的使用 注意:使用前需要添加Design依赖包,使用toolbar时需要隐藏标题头 CollapsingToolbarLayout作用是提供了一个 ...

  2. 0. SQL Server监控清单

    数据库服务器的监控可大致分为两类: (1) 状态监控:数据库服务器有没有在健康地运行? (2) 性能监控:健康运行的同时,有没有性能问题?可不可以更快些? 一. 服务器 1. 状态监控 (1) 服务器 ...

  3. 100-The 3n + 1 problem

    本文档下载 题目: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pro ...

  4. 剑指Offer14 逆序链表

    /************************************************************************* > File Name: 14_Revers ...

  5. Tarjan 离线算法LCA

    #include<map> #include<set> #include<cmath> #include<queue> #include<cstd ...

  6. aspcms中if判断语句的运用

    1.<h3 {if:"[list:isrecommend]"="1"} style="color:red;"{end if}>& ...

  7. part 2 Angular modules and controllers

    What is a module in AngularJS? A module is a container for different parts of your application i.e c ...

  8. Java学习之Java的单例模式

    单例模式有一下特点: 1.单例类只能有一个实例.2.单例类必须自己自己创建自己的唯一实例.3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个 ...

  9. 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突。的解决方法

    在SQL SERVICE的查询的时候遇到了“无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI&q ...

  10. Handoff使用指南 - 理论篇

    Handoff简介 Handoff是iOS 8 和 OS X v10.10中引入的功能,可以让同一个用户在多台设备间传递项目.In iOS 9 and OS X v10.11 支持了Spotlight ...