日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天天色综合天天 | 亚洲少妇精品 | 国产老头和老头xxxx× | 欧美精品自拍视频 | 97神马影院 | 久久久久国产视频 | 亚洲爆乳无码一区二区三区 | 蜜桃臀av | 国产原创在线观看 | 男女啪动最猛动态图 | 久久av中文字幕 | 久久婷婷激情 | 91毛片网站| 夜夜免费视频 | 五月天六月婷婷 | 欧美一区二区三区小说 | 久久久久九九 | 午夜av一区| 欧洲成人在线 | 中文字幕人妻一区二区三区视频 | 国产精品久久久久无码av | 手机看片日本 | 欧美成人精品二区三区99精品 | 黄色高清在线观看 | 成年人黄国产 | 成年人在线免费观看网站 | 国产高清精品一区 | 在线观看麻豆av | 中国黄色录像 | 国模精品视频一区二区 | 波多野结衣中文字幕在线 | 国产精品欧美性爱 | 色窝网| 邻居少妇张开腿让我爽了在线观看 | 亚洲人成亚洲人成在线观看 | 国模私拍在线观看 | 久久亚洲精品中文字幕 | 日本91网站 | 国产美女又黄又爽又色视频免费 | 国产热视频 | 成人h网站 | 葵司av电影 | 国产视频一区二区在线播放 | 四虎4hu| 国产美女作爱视频 | 欧美美女性生活 | 人妻丰满熟妇无码区免费 | 香蕉视频啪啪 | 亚洲精品综合 | 亚洲精品aⅴ | 国产乱国产乱300精品 | 中文字幕――色哟哟 | 四虎视频国产精品免费 | 中文在线字幕 | 久久国内偷拍 | 五月天婷婷激情网 | 黄色仓库av | av动漫天堂 | 亚洲精品在线视频观看 | 国产肥熟| 主人性调教le百合sm | 在线观看欧美成人 | 97超碰碰| 手机看片福利永久 | 内射一区二区三区 | 男女羞羞在线观看 | 落日余晖图片 | 人人干人| 原来神马电影免费高清完整版动漫 | 99久久久精品 | 亚洲成人另类 | www.操.com | 午夜激情啪啪 | 成 年 人 黄 色 大 片大 全 | 欧美激情电影一区二区 | 人妻洗澡被强公日日澡 | 日韩少妇 | 成人性生交大免费看 | 久草www | 亚洲2022国产成人精品无码区 | 性――交――性――乱 | 中文字幕永久在线视频 | 国产精品三 | 久久人爽 | 日日噜噜夜夜狠狠久久丁香五月 | 国产精品久久久一区二区 | 六月婷婷在线 | 69国产在线| 亚洲黄色片在线观看 | 日韩人妻一区二区三区蜜桃视频 | 99re在线视频观看 | 校园春色亚洲 | 亚洲精品高清视频在线观看 | 人人看人人看 | 日韩黄色在线观看 | 欧美视频一二三区 | 女生高潮视频在线观看 | 国产码视频| 小明看国产 |