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. java 集合类简单的分析1

          java中的集合类是很常见的,ArrayList,HashSet,HashMap等,现在就让我们来看下他们的各个类之间的关系图.      Collection ├List │├Linke ...

  2. 【转】SQL 语句:Alter table

    转载自:http://www.w3school.com.cn/sql/sql_alter.asp ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加.修改或删除列. SQL ...

  3. 元数据metadata 对IO有多大影响

    日志文件系统(journaling file systems)可防止系统崩溃时导致的数据不一致问题.对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生 系统崩溃时可以根据日志 ...

  4. python 3.3.2 爬虫记录

    网络上大部分关于python爬虫的介绍以及代码讲解,都用的是python2.7或以下版本,用python3.x版本的甚少. 在python3.3.2版本中,没有urllib2这个库,也没有cookie ...

  5. javascript触摸事件touch使用

    详细内容请点击 Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距.最近一个W3C工作组正合力制定这一触摸事件规范.        在本文深入研究iOS和 ...

  6. Mac下kernel_task占用大量CPU怎么办?

    我们都知道要想让电脑运行的快速,那么就要尽量的保持内存和CPU的充足.不过一些MAC用户发现MAC系统中的Kernel_task会占用大量的CPU,导致电脑发热变卡.这个问题该怎么解决呢? 具体操作步 ...

  7. Android应用数据备份

    在Android上可以很方便地管理数据备份,那些不慎丢失设备的用户会对该功能感激不尽.备份数据会很安全地存储在云端,并且只在具有相同谷歌ID设备上恢复数据. 下面是典型的AndroidManifest ...

  8. Android 开源项目分类汇总

    Android 开源项目分类汇总 Android 开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView ...

  9. hdu 1222 Wolf and Rabbit

    Problem Description There is a hill with n holes around. The holes are signed from 0 to n-1. A rabbi ...

  10. 解决discuz与jquery不兼容问题——下拉列表不能用(Uncaught TypeError: Cannot set property 'position' of undefined)

    问题描述: 最近学着用discuz来模仿一个门户网站,里面要把导航条做出滑动效果,要用到jquery,将要用到jquery引用到header.htm中,如下图所示: 但是由于discuz采用php以及 ...