Windows Phone 7(WP7)開發 在ViewModel中使用NavigationService


  在WP7 APP的開發中,頁面之間的跳轉是一個再常見不過的操作啦,在Xaml中能實現,在Xaml背后的cs文件中用NavigationService能實現,但是在使用MVVM開發模型之后,在ViewModel中就不如前面的實現起來直觀了。

  其實在ViewModel中實現頁面的跳轉也很簡單,下面的代碼:

using Microsoft.Phone.Controls;



var root = App.Current.RootVisual as PhoneApplicationFrame;
root.Navigate(new Uri("/NextPage.xaml", UriKind.Relative));

  一般的任務情況下,這幾行代碼已經能夠完成啦,但是有一個問題,讓我們再細致探討一下:做一個用戶登錄的功能,按照正常的業務流程,用戶在某頁面輸入完用戶名和密碼之后,程序連接服務器端驗證用戶的合法性(此過程需要網絡連接,過程可能需要耗費時間較長,並且是異步操作),當服務器返回數據之后,程序判斷如果是合法用戶則跳轉到用戶個人信息界面,否則給出錯誤提示。

  在VIEWMODEL處理服務器返回數據之后選擇行為的代碼應該是這樣的:

if (result.IsSuccess == true)
            {
                var root = App.Current.RootVisual as PhoneApplicationFrame;
                root.Navigate(new Uri("/UserInfo.xaml", UriKind.Relative));
            }
            else
            {
               //顯示出錯信息。
            }

  但正如剛才所說的,由於要連接服務器,此過程需要網絡連接,如果遇到網絡信號不好,可能用戶在點擊“登錄”按鈕之后,等了10秒都沒有得到任何成功或者失敗的提示(用戶體驗好一點的可能會顯示一個“登錄中”),用戶等的不耐煩了按了后退鍵或者其他操作,進入了別的頁面,突然,服務器的反饋數據回來之后,上面的ViewModel代碼將用戶強行帶入了個人信息頁面,So,用戶很生氣,后果很嚴重。

加一個判斷就好了:

if (result.IsSuccess == true)
            {
                var root = App.Current.RootVisual as PhoneApplicationFrame;
                if (root.CurrentSource == new Uri("Login.xaml", UriKind.Relative))
                    root.Navigate(new Uri("UserInfo.xaml", UriKind.Relative));
            }
            else
            {
                //顯示出錯信息
            }

 

 

(另外發現博客園的文字被其他站點采集嚴重,而且好多站點連個出處都不寫,轉載請注明出處~  http://www.cnblogs.com/vistach)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM