這篇博客文章探討了Xamarin.Forms企業(yè)應(yīng)用程序的驗證。當(dāng)然,有許多方法可以用于驗證。這里介紹的是eShopOnContainers手機應(yīng)用程序中的驗證方法,這是可擴展的,易于單元測試,并且支持數(shù)據(jù)綁定和屬性更改通知。
創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元井陘做網(wǎng)站,已為上家服務(wù),為井陘各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575任何接受用戶輸入的應(yīng)用程序都應(yīng)確保輸入有效。 例如,應(yīng)用程序可以檢查僅包含特定范圍內(nèi)的字符的輸入,具有一定長度,或匹配特定格式。 沒有驗證,用戶可以提供導(dǎo)致應(yīng)用失敗的數(shù)據(jù)。 驗證強制執(zhí)行業(yè)務(wù)規(guī)則,并防止***者注入惡意數(shù)據(jù)。
在Model-ViewModel-Model(MVVM)模式的上下文中,通常需要視圖模型或模型來執(zhí)行數(shù)據(jù)驗證,并向視圖發(fā)出任何驗證錯誤,以便用戶可以對其進行更正。 eShopOnContainers移動應(yīng)用程序執(zhí)行視圖模型屬性的同步客戶端驗證,并通過突出顯示包含無效數(shù)據(jù)的控件,并通過顯示通知用戶為什么數(shù)據(jù)無效的錯誤消息來通知用戶任何驗證錯誤。 下圖顯示了在eShopOnContainers移動應(yīng)用程序中執(zhí)行驗證所涉及的類:
需要驗證的視圖模型屬性的類型為ValidatableObject <T>,并且每個ValidatableObject <T>實例將驗證規(guī)則添加到其Validations屬性。通過調(diào)用ValidatableObject <T>實例的Validate方法從視圖模型調(diào)用驗證,它檢索驗證規(guī)則并根據(jù)ValidatableObject <T> Value屬性執(zhí)行它們。任何驗證錯誤都被放置在ValidatableObject <T>實例的Errors屬性中,并且ValidatableObject <T>實例的IsValid屬性被更新,以指示驗證是成功還是失敗。
屬性更改通知由ExtendedBindableObject類提供,因此Entry控件可以綁定到視圖模型類中的ValidatableObject <T>實例的IsValid屬性,以通知輸入的數(shù)據(jù)是否有效。
驗證規(guī)則通過創(chuàng)建從IValidationRule <T>接口派生的類來指定,如下面的代碼示例所示:
public interface IValidationRule<T> { string ValidationMessage { get; set; } bool Check(T value); }
此接口指定驗證規(guī)則類必須提供用于執(zhí)行所需驗證的布爾檢查方法,以及ValidationMessage屬性,其值為驗證失敗時將顯示的驗證錯誤消息。
以下代碼示例顯示了IsNotNullOrEmptyRule <T>驗證規(guī)則,用于在eShopOnContainers移動應(yīng)用配置為使用模擬服務(wù)時,在LoginView上輸入的用戶名和密碼進行驗證:
public class IsNotNullOrEmptyRule<T> : IValidationRule<T> { public string ValidationMessage { get; set; } public bool Check(T value) { if (value == null) { return false; } var str = value as string; return !string.IsNullOrWhiteSpace(str); } }
Check方法返回一個布爾值,指示value參數(shù)是空值,空值還是僅由空格字符組成。
在eShopOnContainers手機應(yīng)用程序中,需要驗證的視圖模型屬性被聲明為ValidatableObject <T>類型,其中T是要驗證的數(shù)據(jù)的類型。 以下代碼示例顯示了一個此類屬性的示例:
public ValidatableObject<string> UserName { get { return _userName; } set { _userName = value; RaisePropertyChanged(() => UserName); } }
為了進行驗證,驗證規(guī)則必須添加到ValidatableObject <T>實例的Validations集合中,如以下代碼示例所示:
private void AddValidations() { _userName.Validations.Add(new IsNotNullOrEmptyRule<string> { ValidationMessage = "A username is required." }); }
此方法將IsNotNullOrEmptyRule <T>驗證規(guī)則添加到ValidatableObject <T>實例的Validations集合中,包括ValidationMessage屬性的值,該值指定驗證失敗時將顯示的驗證錯誤消息。
視圖模型屬性可以手動觸發(fā)驗證。 例如,當(dāng)使用模擬服務(wù)時,當(dāng)用戶點擊LoginView上的Login按鈕時,會發(fā)生在eShopOnContainers移動應(yīng)用程序中。 命令委托在LoginViewModel中調(diào)用MockSignInAsync方法,該方法通過執(zhí)行Validate方法來調(diào)用驗證,該方法又調(diào)用ValidateUserName方法:
private bool ValidateUserName() { return _userName.Validate(); }
ValidateUserName方法通過調(diào)用ValidatableObject <T>實例上的Validate方法來執(zhí)行用戶在LoginView上輸入的用戶名驗證。 以下代碼示例顯示了ValidatableObject <T>類中的Validate方法:
public bool Validate() { Errors.Clear(); IEnumerable<string> errors = _validations .Where(v => !v.Check(Value)) .Select(v => v.ValidationMessage); Errors = errors.ToList(); IsValid = !Errors.Any(); return this.IsValid; }
此方法將清除Errors集合,然后檢索添加到對象的Validations集合的任何驗證規(guī)則。 執(zhí)行每個檢索的驗證規(guī)則的檢查方法,并且無法驗證數(shù)據(jù)的任何驗證規(guī)則的ValidationMessage屬性值都將添加到ValidatableObject <T>實例的錯誤集合中。 最后,設(shè)置IsValid屬性,并將其值返回給調(diào)用方法,指示驗證是成功還是失敗。
綁定屬性更改時也會自動觸發(fā)驗證。 了解更多信息,請查看屬性變化是的觸發(fā)驗證。
eShopOnContainers手機應(yīng)用程序通過突出顯示包含無效數(shù)據(jù)的控件以紅色線條通知用戶任何驗證錯誤,并顯示一條錯誤消息,通知用戶為什么數(shù)據(jù)在包含無效數(shù)據(jù)的控件下無效。 以下屏幕截圖顯示eShopOnContainers手機應(yīng)用程序中的一些LoginView,當(dāng)出現(xiàn)驗證錯誤時:
LineColorBehavior附加行為用于突出顯示已發(fā)生驗證錯誤的Entry控件。 以下代碼示例顯示如何將LineColorBehavior附加行為附加到Entry控件:
<Entry Text="{Binding UserName.Value, Mode=TwoWay}"> <Entry.Style> <OnPlatform x:TypeArguments="Style" iOS="{StaticResource EntryStyle}" Android="{StaticResource EntryStyle}" WinPhone="{StaticResource UwpEntryStyle}"/> </Entry.Style> ... </Entry>
Entry控件使用顯式樣式,如下面的代碼示例所示:
<Style x:Key="EntryStyle" TargetType="{x:Type Entry}"> ... <Setter Property="behaviors:LineColorBehavior.ApplyLineColor" Value="True" /> <Setter Property="behaviors:LineColorBehavior.LineColor" Value="{StaticResource BlackColor}" /> ... </Style>
此樣式將EntryColorBehavior附加行為的ApplyLineColor和LineColor附加屬性設(shè)置為Entry控件。 當(dāng)ApplyLineColor附加屬性的值被設(shè)置或更改時,LineColorBehavior附加行為執(zhí)行OnApplyLineColorChanged方法,該方法將EntryLineColorEffect類添加或刪除到Entry的Effects集合。 有關(guān)EntryLineColorEffect類的更多信息,請查看突出顯示包含無效數(shù)據(jù)的控件。
Entry控件還將DataTrigger添加到其Triggers集合中。 以下代碼示例顯示DataTrigger:
<Entry Text="{Binding UserName.Value, Mode=TwoWay}"> ... <Entry.Triggers> <DataTrigger TargetType="Entry" Binding="{Binding UserName.IsValid}" Value="False"> <Setter Property="behaviors:LineColorBehavior.LineColor" Value="{StaticResource ErrorColor}" /> </DataTrigger> </Entry.Triggers> </Entry>
該DataTrigger監(jiān)視UserName.IsValid屬性,如果值為false,它將執(zhí)行Setter,它將LineColorBehavior附加行為的LineColor附加屬性更改為紅色。
UI會在數(shù)據(jù)失敗驗證的每個控件下面的Label控件中顯示驗證錯誤消息。 以下代碼示例顯示如果用戶未輸入有效的用戶名,則該標(biāo)簽顯示驗證錯誤消息:
<Label Text="{Binding UserName.Errors, Converter={StaticResource FirstValidationErrorConverter}" Style="{StaticResource ValidationErrorLabelStyle}" />
每個標(biāo)簽綁定到正在驗證的視圖模型對象的Errors屬性。 錯誤屬性由ValidatableObject <T>類提供,類型為List <string>。 因為Errors屬性可能包含多個驗證錯誤,F(xiàn)irstValidationErrorConverter實例用于從集合中檢索第一個錯誤以進行顯示。
使用Xamarin.Forms的企業(yè)應(yīng)用程序模式專注于開發(fā)Xamarin.Forms更容易測試,維護和發(fā)展的企業(yè)應(yīng)用程序的核心模式和架構(gòu)指導(dǎo)。 電子書還附帶了示例應(yīng)用程序,eShopOnContainers手機應(yīng)用程序 ,其執(zhí)行視圖模型屬性的同步客戶端驗證,并通過突出顯示包含無效數(shù)據(jù)的控件,并通過顯示通知用戶為什么數(shù)據(jù)無效的錯誤消息來通知用戶任何驗證錯誤。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前名稱:在Xamarin.Forms企業(yè)應(yīng)用程序中進行驗證-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article34/cdesse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、移動網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、營銷型網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容