WindowsPhone項(xiàng)目組織結(jié)構(gòu)&簡(jiǎn)單登陸例子(下)
上一篇WindowsPhone項(xiàng)目組織結(jié)構(gòu)&簡(jiǎn)單登陸例子(上)中 已經(jīng)介紹了WP7項(xiàng)目組織結(jié)構(gòu),那么現(xiàn)在就讓我們來(lái)進(jìn)行實(shí)際開(kāi)發(fā)吧,本來(lái)打算寫(xiě)一個(gè)helloworld的,但是這未免太對(duì)不起觀眾了,于是就改成做個(gè)登 陸的例子,當(dāng)然這個(gè)登陸例子我們暫時(shí)不連接遠(yuǎn)程服務(wù),就在文件中寫(xiě)死吧,以后講到遠(yuǎn)程服務(wù)的時(shí)候必然會(huì)使用到的,這個(gè)登陸例子也可以作為后續(xù)開(kāi)發(fā)使用。
一:新建一個(gè)Window phone application項(xiàng)目。
因?yàn)槲覀兪切枰龅顷?,那么必定是有用戶賬號(hào),密碼的,那么就建立一個(gè)類(lèi)UerInfo.cs ,添加屬性
public String userName;
public String passworld;
二:我們的登陸是要訪問(wèn)服務(wù)端進(jìn)行驗(yàn)證的,但是呢,我們現(xiàn)在還不需要服務(wù)器端,當(dāng)然,我們可以模擬后臺(tái)服務(wù)器端登陸驗(yàn)證:
1:我們寫(xiě)一個(gè)接口,定義用戶模塊的一些方法,這里有一個(gè)登陸方法, UsetInfo Login(string userName,string password);
2:定義個(gè)類(lèi),實(shí)現(xiàn)該接口的方法,比如上面登陸方法:
- public UsetInfo Login(string userName, string password)
- {
- UsetInfo info = null;
- if (userName.Equals("sa") && password.Equals("123456"))
- {
- info=new UsetInfo();
- info.userName="sa";
- info.passworld="123456";
- }
- return info;
- }
三:我們模擬的服務(wù)器端數(shù)據(jù)寫(xiě)好后,就開(kāi)始實(shí)現(xiàn)我們的UI了,UI比較簡(jiǎn)單,
2個(gè)TextBlock 控件(戶名,密碼顯示),
1個(gè)TextBox 用來(lái)提供輸入用戶名,然后1個(gè)密碼框:PasswordBox,用來(lái)接收用戶輸入的密碼,設(shè)置屬性passwordChar接收密碼隱藏為:*
1個(gè)CheckBox 用來(lái)提供用戶選擇是否記住密碼,注冊(cè)Checked事件
1個(gè)Button控件,用來(lái)進(jìn)行登陸提交,注冊(cè)Click事件
當(dāng)然我們可以提供一個(gè)進(jìn)度條,ProgressBar ,可以注冊(cè)ValueChanged事件,就是值改變事件,用來(lái)顯示進(jìn)度,這里我們暫時(shí)不用 。
然后拖動(dòng)控件進(jìn)行簡(jiǎn)單布局,如下:
四:現(xiàn)在就進(jìn)入.cs文件中處理事件,接收戶名,密碼,然后調(diào)用登陸。當(dāng)然如果用戶勾選了“記住密碼”,就需要保存戶名,密碼到本 機(jī),下次打開(kāi)軟件時(shí)顯示出來(lái),那么怎么保存呢?這里我們用IsolatedStorageSettings(獨(dú)立存貯,類(lèi)似于鍵值對(duì)形式保存數(shù)據(jù))
具體代碼如下:
- //我們把用戶對(duì)象保存進(jìn)去
- IsolatedStorageSettings.ApplicationSettings["UserInfo"] = usetInfo;
- IsolatedStorageSettings.ApplicationSettings.Save();
當(dāng)然開(kāi)始加載頁(yè)面時(shí)候也應(yīng)該取出保存的UserInfo,并把戶號(hào),密碼等設(shè)置在文本框中:
- //判斷是否有鍵
- if(IsolatedStorageSettings.ApplicationSettings.Contains("UserInfo"))
- {
- UsetInfo usetInfo = IsolatedStorageSettings.ApplicationSettings["UserInfo"] as UsetInfo;
- //顯示在文本框中
- txtUserName.Text = usetInfo.userName;
- txtPassword.Password= usetInfo.passworld;
- }
五:很多時(shí)候我們登陸用戶的一些信息需要保存起來(lái)提供給全局使用,那么必定要涉及保存全局的變量,上一篇文章中,我們知道App.xaml.cs里面可以保存全局性的東西,那么我們就把用戶信息保存在App.xaml.cs里面吧,以便下次使用。
- //保存登陸用戶(全局),App.xaml.cs
- private UsetInfo usetInfo;
- public UsetInfo GetUsetInfo()
- {
- return usetInfo;
- }
- public void SetUsetInfo(UsetInfo usetInfo)
- {
- this.usetInfo = usetInfo;
- }
在Main.xmal.cs中保存到全局中:
- //保存用戶到全局變量中
- App app= Application.Current as App;
- if(app!=null)
- {
- app.SetUsetInfo(usetInfo);
- if (app.GetUsetInfo()!=null)
- MessageBox.Show("您已經(jīng)登陸成功!,您已經(jīng)保存對(duì)象到全局");
具體的還是看代碼吧,如下:
- public partial class App : Application
- {
- /// <summary>
- /// Provides easy access to the root frame of the Phone Application.
- /// </summary>
- /// <returns>The root frame of the Phone Application.</returns>
- public PhoneApplicationFrame RootFrame { get; private set; }
- //保存登陸用戶(全局)
- private UsetInfo usetInfo;
- public UsetInfo GetUsetInfo()
- {
- return usetInfo;
- }
- public void SetUsetInfo(UsetInfo usetInfo)
- {
- this.usetInfo = usetInfo;
- }
- bool? isChecked = false;
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- //注冊(cè)事件
- initEventListener();
- }
- private void initEventListener()
- {
- this.Loaded += new RoutedEventHandler(MainPage_Loaded);
- btnLogin.Click += new RoutedEventHandler(btnLogin_Click);
- chkRecord.Checked += new RoutedEventHandler(chkRecord_Checked);
- progressBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(progressBar_ValueChanged);
- }
- //本頁(yè)加載時(shí)候根據(jù)獨(dú)立存貯保存的內(nèi)容,顯示在文本框里
- void MainPage_Loaded(object sender, RoutedEventArgs e)
- {
- //判斷是否有鍵
- if(IsolatedStorageSettings.ApplicationSettings.Contains("UserInfo"))
- {
- UsetInfo usetInfo = IsolatedStorageSettings.ApplicationSettings["UserInfo"] as UsetInfo;
- //顯示在文本框中
- txtUserName.Text = usetInfo.userName;
- txtPassword.Password= usetInfo.passworld;
- }
- }
- void progressBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
- {
- }
- void chkRecord_Checked(object sender, RoutedEventArgs e)
- {
- if (sender!=null)
- {
- CheckBox chkRecord = sender as CheckBox;
- isChecked=chkRecord.IsChecked;
- if (isChecked==true)
- {
- //判斷是否被選中,然后保存到文件中或是獨(dú)立存貯中,在下次啟動(dòng)時(shí)候就讀取文件或獨(dú)立存貯的內(nèi)容
- isChecked = true;
- }
- }
- }
- void btnLogin_Click(object sender, RoutedEventArgs e)
- {
- string userName = txtUserName.Text.Trim();
- string password = txtPassword.Password.Trim();
- //調(diào)用服務(wù)器端進(jìn)行數(shù)據(jù)驗(yàn)證登陸
- UsetInfo usetInfo= PhoneAppService.getInstance().getUserInfoService().Login(userName, password);
- if (usetInfo!=null)
- {
- //保存用戶到全局變量中
- App app= Application.Current as App;
- if(app!=null)
- {
- app.SetUsetInfo(usetInfo);
- if (app.GetUsetInfo()!=null)
- MessageBox.Show("您已經(jīng)登陸成功!,您已經(jīng)保存對(duì)象到全局");
- //根據(jù)單選框選中情況保存數(shù)據(jù)到獨(dú)立存貯中
- if(isChecked==true)
- {
- //我們把用戶對(duì)象保存進(jìn)去
- IsolatedStorageSettings.ApplicationSettings["UserInfo"] = usetInfo; IsolatedStorageSettings.ApplicationSettings.Save();
- }
- }
- }
- }