日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SilverlightMVVM模式中的数据校验

發(fā)布時(shí)間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SilverlightMVVM模式中的数据校验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

silverlight的數(shù)據(jù)校驗(yàn)大體分成3種類型:

  • 數(shù)據(jù)是非必填的但是需要滿足相應(yīng)數(shù)據(jù)格式的
  • 數(shù)據(jù)是必填的且可能需要進(jìn)行數(shù)據(jù)格式校驗(yàn)的
  • 其他(如數(shù)據(jù)的聯(lián)動(dòng)校驗(yàn))
  • 以下的數(shù)據(jù)校驗(yàn)方式針對(duì)第二種:

  • 在相應(yīng)的控件綁定上加上NotifyOnValidationError=True,ValidatesOnDataErrors=True
    <TextBox Grid.Row="5"Grid.Column="1"Grid.ColumnSpan="2"Width="286"HorizontalAlignment="Left"Text="{Binding EventContent,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnDataErrors=True}" />

    NotifyOnValidationError屬性

    該屬性的功能,是當(dāng)驗(yàn)證錯(cuò)誤出現(xiàn)時(shí)是否激活BindingValidationError事件;該屬性是Silverlight獨(dú)有的驗(yàn)證屬性之一,經(jīng)常和ValidatesOnExceptions屬性配合使用。

    ValidatesOnDataErrors屬性

    獲取或設(shè)置一個(gè)值,該值指示是否包含?DataErrorValidationRule。?DataErrorValidationRule?是內(nèi)置的驗(yàn)證規(guī)則,它檢查由源對(duì)象的?IDataErrorInfo實(shí)現(xiàn)所引發(fā)的錯(cuò)誤。?如果引發(fā)錯(cuò)誤,則綁定引擎將對(duì)該錯(cuò)誤創(chuàng)建一個(gè)?ValidationError?并將其添加到綁定元素的?Validation.Errors?集合中。?如果不存在錯(cuò)誤,將清除此驗(yàn)證反饋,除非另一條規(guī)則引發(fā)驗(yàn)證問題。



  • 在包含所有校驗(yàn)項(xiàng)的父級(jí)控件上加上:BindingValidationError,比如Grid
    <Grid x:Name="LayoutRoot"Grid.Row="0"Grid.Column="0"BindingValidationError="LayoutRoot_BindingValidationError"> ... </Grid>

    ?

    BindingValidationError事件

    該事件是一個(gè)路由事件,當(dāng)數(shù)據(jù)驗(yàn)證錯(cuò)誤出現(xiàn)時(shí),將綁定該錯(cuò)誤到數(shù)據(jù)源;也可以簡(jiǎn)單的理解為綁定錯(cuò)誤到數(shù)據(jù)源的一個(gè)行為。該事件可在控件本身調(diào)用,也可在其父控件中調(diào)用。例如,在TextBox中,可以聲明調(diào)用BindingValidationError,或者可以該TextBox的父容器控件Grid,StackPanel中調(diào)用BindingValidationError事件。這里需要注意的是,如果在Silverlight的MVVM設(shè)計(jì)模式下,僅在被驗(yàn)證的控件本身激活BindingValidationError事件,才能正常的被UI捕獲到錯(cuò)誤信息,不支持在父控件中對(duì)BindingValidationError事件進(jìn)行調(diào)用。

  • 后臺(tái).cs文件中BindingValidationError的具體事件
    private void LayoutRoot_BindingValidationError(object sender, ValidationErrorEventArgs e){if (e.Action == ValidationErrorEventAction.Added){var control = e.OriginalSource as Control;if (control != null)control.Background = new SolidColorBrush(Colors.Yellow);}if (e.Action == ValidationErrorEventAction.Removed){var control = e.OriginalSource as Control;if (control != null)control.Background = new SolidColorBrush(Colors.White);}} 指定當(dāng)發(fā)現(xiàn)驗(yàn)證錯(cuò)誤信息增加時(shí),設(shè)定控件的背景色為黃色,否則為白色。
  • 在對(duì)應(yīng)的屬性上加上,Reuired部分可改成相應(yīng)的正則表達(dá)式
    [Required(ErrorMessage = "事件內(nèi)容必填")][Display(Name = "事件內(nèi)容")]public string EventContent{get { return _eventContent; }set{ClearError();_eventContent = value;RaisePropertyChanged("EventContent");}}
  • 子窗口點(diǎn)擊提交按鈕的命令中加上If(Validate())
    private ICommand _submitCommand;public ICommand SubmitCommand{get{return _submitCommand ?? (_submitCommand = new RelayCommand(() =>{if (Validate())SubmitEvent();}));}set { _submitCommand = value; }}

    ?數(shù)據(jù)校驗(yàn)Region,可寫在基類中。

    #region 數(shù)據(jù)校驗(yàn)#region IDataErrorInfo 成員private string _dataError = string.Empty;private Dictionary<string, string> _dataErrors = new Dictionary<string, string>();public string Error{get { return _dataError; }}public string this[string columnName]{get{if (_dataErrors.ContainsKey(columnName))return _dataErrors[columnName];elsereturn null;}}#endregionpublic void AddError(string name, string error){_dataErrors[name] = error;RaisePropertyChanged(name);}public void RemoveError(string name){if (_dataErrors.ContainsKey(name)){_dataErrors.Remove(name);RaisePropertyChanged(name);}}public void ClearError(){var keys = new string[_dataErrors.Count];_dataErrors.Keys.CopyTo(keys, 0);foreach (var key in keys){this.RemoveError(key);}}public bool Validate(){this.ClearError();var results = new List<ValidationResult>();if (!Validator.TryValidateObject(this, new ValidationContext(this, null, null), results, true)){foreach (var result in results){this.AddError(result.MemberNames.First(), result.ErrorMessage);}return false;}return true;}public void Validate(string name){var results = new List<ValidationResult>();if (Validator.TryValidateProperty(name, new ValidationContext(this, null, null), results)){RemoveError(name);}}#endregion View Code

    ?

  • 效果


    點(diǎn)擊確定時(shí):
  • 轉(zhuǎn)載于:https://www.cnblogs.com/tiny-wang/p/3156449.html

    總結(jié)

    以上是生活随笔為你收集整理的SilverlightMVVM模式中的数据校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。