60分でわかる!SilverlightとWPFの入力チェック

13,511 views
13,142 views

Published on

VSUG Day 2010 Winter

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,511
On SlideShare
0
From Embeds
0
Number of Embeds
1,520
Actions
Shares
0
Downloads
73
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

60分でわかる!SilverlightとWPFの入力チェック

  1. 1. VSUG DAY 2010 Winter60分でわかる!SilverlightとWPFの入力チェックグレープシティ株式会社 八巻 雄哉
  2. 2. “入力チェック”とは UIが受け取ったユーザー入力の妥当性を 検証し、結果に応じて何らかの アクションをとること ユーザー入力後、コントロールに保持されて いる入力値を検証し、結果に応じてユーザー への通知を行うというアクションをとる VSUG DAY 2010.12.11 2
  3. 3. 検証とアクション検証 アクション TextBoxに入力された メッセージをToolTipで 値が数値かどうかを 表示する 確認する VSUG DAY 2010.12.11 3
  4. 4. 60分でわかる!SilverlightとWPFの入力チェック検証 VSUG DAY 2010.12.11 4
  5. 5. WPF/Silverlightの検証 WPF/Silverlightでは、 データバインディングのプロセスの1つ として検証機能が提供されている データ UI要素 バインディング オブジェクト オブジェクト 依存関係 検証 変換 プロパティ プロパティバインディングターゲット バインディングソース VSUG DAY 2010.12.11 5
  6. 6. 本セッションのデモを図解 abc@ Customer TextBox バインディング オブジェクト オブジェクト Text AccountName プロパティ プロパティ 検証 abc@ abc@バインディングターゲット バインディングソース VSUG DAY 2010.12.11 6
  7. 7. 検証処理実装方法の種類 Windows WPF 4 Silverlight 4 Phone OS 7.0 ValidationRuleを継承した① ✔ - - カスタムクラス Exception(例外)によるエラー通知② ExceptionValidationRule ✔ - - ValidatesOnExceptions ✔ ✔ ✔ IDataErrorInfoによるエラー通知③ DataErrorValidationRule ✔ - - ValidatesOnDataErrors ✔ ✔ - INotifyDataErrorInfoによるエラー通知④ ValidatesOnNotifyDataErrors - ✔ -ValidatesOn***プロパティをTrueに設定した場合、***ValidationRuleを設定したときと同じ動作となる。 Silverlight 4/Windows Phone OS 7.0にはValidationRulesプロパティが存在しないため、 必ずValidatesOn***を使用する。 VSUG DAY 2010.12.11 7
  8. 8. ValidationRulesプロパティ使用<TextBox> <TextBox.Text> <Binding Path="AccountName"> <Binding.ValidationRules> <ExceptionValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text></TextBox> WPF 4 VSUG DAY 2010.12.11 8
  9. 9. ValidatesOn***プロパティ使用<TextBox Text="{Binding AccountName, ValidatesOnExceptions=True}"/> WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 9
  10. 10. 2つの検証処理実装場所 ②Exception ③IDataErrorInfo①ValidationRule ④INotifyDataErrorInfo バインディングターゲット バインディングソース UI要素 データオブジェクト 依存関係 プロパティ プロパティ VSUG DAY 2010.12.11 10
  11. 11. ①ValidationRule WPF 4 VSUG DAY 2010.12.11 11
  12. 12. ①ValidationRule<Binding Path="AccountName"> <Binding.ValidationRules> <local:AccountNameValidationRule/> </Binding.ValidationRules></Binding> WPF 4 バインディング TextBox オブジェクト Customer カスタムValidationRule Text AccountName プロパティ ValidationResultを返す プロパティ VSUG DAY 2010.12.11 12
  13. 13. カスタムValidationRuleclass AccountNameValidationRule : ValidationRule{ public override ValidationResult Validate(object value, System.Glob・・・ { if (string.IsNullOrEmpty((string)value)) { return new ValidationResult(false, "必須入力項目です。"); } else if (!Regex.IsMatch((string)value, "^[0-9A-Za-z]{5,12}$")) { return new ValidationResult(false, "半角英数字5 文字以上12文字以下で入力してください。"); } return ValidationResult.ValidResult; }} WPF 4 VSUG DAY 2010.12.11 13
  14. 14. ①ValidationRuleDEMO VSUG DAY 2010.12.11 14
  15. 15. ②Exception WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 15
  16. 16. ②Exception<TextBox Text="{Binding AccountName, ValidatesOnExceptions=True}"/> WPF 4 Silverlight 4 Windows Phone OS 7.0 バインディング TextBox オブジェクト Customer ValidatesOnExceptions=True AccountName Text プロパティ プロパティ 検証処理 例外をスロー VSUG DAY 2010.12.11 16
  17. 17. Exception(例外)によるエラー通知public string AccountName{ get { return _accountName; } set { if (string.IsNullOrEmpty((string)value)) { throw new Exception("必須入力項目です。"); } else if (!Regex.IsMatch((string)value, "^[0-9A-Za-z]{5,12}$")) { throw new Exception("半角英数字5文字以上12文字以下で入力してください。"); } _accountName = value; }} WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 17
  18. 18. ②ExceptionDEMO VSUG DAY 2010.12.11 18
  19. 19. System.ComponentModel.DataAnnotations名前空間 WPF 4 Silverlight 4 VSUG DAY 2010.12.11 19
  20. 20. ValidationException(検証例外) デバッグ実行で中断しない設定 (Visual Studio 2010既定) VSUG DAY 2010.12.11 20
  21. 21. 検証属性を利用した検証処理 カスタムの検証属性 CustomValidationAttribute DataType列挙体に用意されたValidationAttribute(検証属性) DataTypeAttribute データ型(電話番号など)を指定 特定の列挙体を指定し、値が含まれ EnumDataTypeAttribute ることを保証 最小値および最大値の制約を指定 RangeAttribute RegularExpressionAttribute 正規表現を使用して有効な値を指定 RequiredAttribute 値が必須であることを指定 StringLengthAttribute 最大文字数および最小文字数を指定 VSUG DAY 2010.12.11 21
  22. 22. Validatorクラス 検証属性を使用するためのヘルパークラス ValidatePropertyメソッド 指定されたプロパティの値が有効であるかどうか を判断し、プロパティが有効でない場合は、 ValidationExceptionをスローします。 VSUG DAY 2010.12.11 22
  23. 23. 検証属性を使用して例外をスロー[Required(ErrorMessage = "必須入力項目です。")][RegularExpression(@"^[0-9A-Za-z]{5,12}$", ErrorMessage = "半角英数字5文字以上12文字以下で入力してください。")]public string AccountName{ get { return _accountName; } set { Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "AccountName" }); _accountName = value; }} WPF 4 Silverlight 4 VSUG DAY 2010.12.11 23
  24. 24. ②Exception + 検証属性DEMO VSUG DAY 2010.12.11 24
  25. 25. ③IDataErrorInfo WPF 4 Silverlight 4 VSUG DAY 2010.12.11 25
  26. 26. ③IDataErrorInfo<TextBox Text="{Binding AccountName, ValidatesOnDataErrors=True}"/> WPF 4 Silverlight 4 バインディング TextBox オブジェクト Customer ValidatesOnDataErrors=True AccountName Text プロパティ プロパティ 検証エラーメッセージ Itemプロパティ (String)を返す VSUG DAY 2010.12.11 26
  27. 27. IDataErrorInfoのメンバー Errorプロパティ オブジェクトの検証エラーを説明する文字列 を取得。エラーが存在しない場合はnull参照。 Itemプロパティ(インデクサ) 指定されたプロパティの検証エラーを説明す る文字列を取得。エラーが存在しない場合は null参照。 VSUG DAY 2010.12.11 27
  28. 28. サンプルコード( IDataErrorInfo )public string this[string columnName]{ get { switch (columnName) { case "AccountName": if (string.IsNullOrEmpty(AccountName)) { return "必須入力項目です。"; } else if (!Regex.IsMatch(AccountName, "^[0-9A-Za-z]{5,12}$")) { return "半角英数字5文字以上12文字以下で入力してください。"; } break; } return null; }} WPF 4 Silverlight 4 VSUG DAY 2010.12.11 28
  29. 29. ③IDataErrorInfoDEMO VSUG DAY 2010.12.11 29
  30. 30. Validatorクラス(System.ComponentModel.DataAnnotations名前空間) 検証属性を使用するためのヘルパークラス ValidatePropertyメソッド 指定されたプロパティの値が有効であるかどうか を判断し、値が有効でない場合は ValidationExceptionをスローします。 TryValidatePropertyメソッド 指定されたプロパティ値が有効であるかどうかを 判断し、値が有効な場合はTrue、そうでない場合 はFalseを返します。 VSUG DAY 2010.12.11 30
  31. 31. 検証属性を使用して判定public string this[string columnName]{ get { var results = new List<ValidationResult>(); if (Validator.TryValidateProperty( GetType().GetProperty(columnName).GetValue(this, null), new ValidationContext(this, null, null) { MemberName = columnName }, results)) { return null; } return results.First().ErrorMessage; }} WPF 4 Silverlight 4 VSUG DAY 2010.12.11 31
  32. 32. ③IDataErrorInfo + 検証属性DEMO VSUG DAY 2010.12.11 32
  33. 33. ④INotifyDataErrorInfo Silverlight 4 VSUG DAY 2010.12.11 33
  34. 34. ④INotifyDataErrorInfo<TextBox Text="{Binding AccountName, ValidatesOnNotifyDataErrors=True}"/> 既定でTrue Silverlight 4 バインディング TextBox オブジェクト Customer ValidatesOnNotifyDataErrors=True AccountName Text プロパティ プロパティ 検証エラー情報の GetErrors コレクションを返す メソッド ErrorsChangedイベント VSUG DAY 2010.12.11 34
  35. 35. INotifyDataErrorInfoのメンバー GetErrorsメソッド 指定されたプロパティの検証、およびオブジェクト の検証におけるエラー情報(複数可)を取得。エ ラーが存在しない場合はnull参照。 HasErrorsプロパティ オブジェクトの検証エラーの有無をBoolean値として 取得 ErrorsChangedイベント プロパティまたはオブジェクト全体の検証エラーが 変更されたときに発生 VSUG DAY 2010.12.11 35
  36. 36. DataErrorInfoの優位点 1つの項目で複数の検証エラーを返せる エラー内容として文字列(String)以外の 情報を設定可能(①も可) データバインディングによる値の更新 に同期せず、任意のタイミングで検証 可能 VSUG DAY 2010.12.11 36
  37. 37. INotifyDataErrorInfoの実装例public System.Collections.IEnumerable GetErrors(string propertyName){ var results = new List<ValidationResult>(); if (Validator.TryValidateProperty( GetType().GetProperty(propertyName).GetValue(this, null), new ValidationContext(this, null, null) { MemberName = propertyName }, results)) { return null; } return results;} Silverlight 4 VSUG DAY 2010.12.11 37
  38. 38. ErrorsChangedイベントの発行public string AccountName{ get { return _accountName; } set { // 実際にはここで非同期処理でサーバー側で値を検証し // ErrorsChangedイベントを発行する RaiseErrorsChanged("AccountName"); _accountName = value; }} Silverlight 4 VSUG DAY 2010.12.11 38
  39. 39. ④INotifyDataErrorInfo + 検証属性DEMO VSUG DAY 2010.12.11 39
  40. 40. 60分でわかる!SilverlightとWPFの入力チェックアクション VSUG DAY 2010.12.11 40
  41. 41. 検証エラー発生時に何が起こるのか? その検証エラーに対応したValidationErrorオブジェクトが作成され、バインドされている 要素のValidation.Errors添付プロパティ(読み取り専用のコレクション)に追加されるValidationErrorクラス ErrorContentプロパティ エラーメッセージを取得 Exceptionプロパティ 検証エラーの原因となった例外を取得 VSUG DAY 2010.12.11 41
  42. 42. 本セッションのデモを図解 Validation.Errors添付プロパティ ValidationErrorオブジェクト “5文字以上12文字以下です。” ValidationErrorオブジェクト “半角英数字のみ使用できます。” Customer TextBox バインディング オブジェクト オブジェクト Text AccountName プロパティ プロパティ 検証 abc@ abc@バインディングターゲット バインディングソース VSUG DAY 2010.12.11 42
  43. 43. 検証アクション実装方法の種類 Validation.Errors添付プロパティの値に 応じて、各種検証アクションのための仕 組みが動作する WPF Silverlight Windows Phone OS 7.0a. ErrorTemplate ✔ - -b. ValidationStates ✔ ✔ ✔ 既定ではVisualStateは定義 既定で定義されている(VSM) されていない VisualStateは空c. HasError ✔ ✔ ✔添付プロパティ(プロパティトリ ✔ - -ガー) ✔ ✔ ✔d. イベント Validation.Error FrameworkElement.Bindi FrameworkElement.Bindi 添付イベント ngValidationErrorイベント ngValidationErrorイベント VSUG DAY 2010.12.11 43
  44. 44. a. ErrorTemplate添付プロパティ WPF 4 VSUG DAY 2010.12.11 44
  45. 45. a. ErrorTemplate添付プロパティ Validation.Errors添付プロパティの値が 空でない(検証条件に対して無効な値が 設定されている)場合に、 ErrorTemplate添付プロパティに設定さ れたテンプレート(外観)が表示される VSUG DAY 2010.12.11 45
  46. 46. a. ErrorTemplate添付プロパティ Validation.ErrorTemplate(ControlTemplate型)デフォルトのErrorTemplate<Validation.ErrorTemplate> <ControlTemplate> <Border BorderBrush="#FFFF0000" BorderThickness="1,1,1,1"> <AdornedElementPlaceholder /> </Border> </ControlTemplate></Validation.ErrorTemplate> WPF 4 AdornedElementPlaceholderはErrorTemplateが 適用される要素(今回の場合TextBox)を表す VSUG DAY 2010.12.11 46
  47. 47. a. ErrorTemplate添付プロパティDEMO VSUG DAY 2010.12.11 47
  48. 48. b. VisualStateManager(VSM) WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 48
  49. 49. b. VisualStateManager(VSM) 動的な外観状態と、その外観状態に遷移する 条件や遷移にかかる時間を管理する一連の機能 を提供するのがVSM ValidationStates(VisualStateGroup)Errors添付 VisualState 説明プロパティ空 Valid コントロールが有効 InvalidFocused フォーカスがある状態で、コントロールが 無効空でない InvalidUnfocused フォーカスがない状態で、コントロールが 無効“見た目”を決めるコントロール・テンプレート - @IThttp://www.atmarkit.co.jp/fdotnet/vblab/uiframework_04/uiframework_04_03.html VSUG DAY 2010.12.11 49
  50. 50. VSMの優位点 値が無効な場合だけでなく、値が有効な 場合の外観も定義できる 外観への遷移方法(VisualTransition)を 定義できる 難点 Expression Blendがないとちょっとキツイ VSUG DAY 2010.12.11 50
  51. 51. b. VisualStateManager(VSM)DEMO VSUG DAY 2010.12.11 51
  52. 52. c. HasError添付プロパティ WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 52
  53. 53. c. HasError添付プロパティ(プロパティトリガー) Validation.HasError ValidationErrorが存在する場合はTrue<Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> <Setter Property="Background" Value="Red"/> </Trigger> </Style.Triggers></Style> WPF 4 VSUG DAY 2010.12.11 53
  54. 54. Silverlightのドキュメントより抜粋 WPFでは、プロパティトリガーによってデータ検証が実 行される場合があります。その場合、 Validation.HasErrorは、TriggerのProperty属性値を チェックするためのプロパティ条件として使用されます。 このようなイベントハンドラーは、コード中のオブジェ クトのValidation.HasError添付プロパティをチェック することができますが、通常はGetHasErrorメソッドを 呼び出すか、またはHasErrorProperty識別子を使用し て GetValue メソッドを呼び出します。 BindingValidationErrorイベントのハンドラーは、通常、 検証を行うためにそのロジックの一部として特定の VisualStateに変更されます。 VSUG DAY 2010.12.11 54
  55. 55. d. イベント WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 55
  56. 56. d. イベント WPF 4 Validation.Error添付イベント Silverlight 4/Windows Phone OS 7.0 FrameworkElement.BindingValidationErrorイベント ValidationErrorが追加/削除された際に 発生するイベント Binding.NotifyOnValidationErrorプロパティを Trueに設定する必要あり これらのイベントはルーティングイベント (バブル)となっているため、親要素の イベントハンドラーで通知を受け取ることが可能 VSUG DAY 2010.12.11 56
  57. 57. d. イベント イベントの引数ValidationErrorEventArgsに 含まれているActionプロパティ ValidationErrorEventAction.Added 新しいValidationErrorオブジェクトが検出された ValidationErrorEventAction.Removed 既存のValidationErrorが削除されたif (e.Action == ValidationErrorEventAction.Added){ // 検証エラーが発生した時の処理}else if (e.Action == ValidationErrorEventAction.Removed){ //検証エラーがなくなった時の処理} WPF 4 Silverlight 4 Windows Phone OS 7.0 VSUG DAY 2010.12.11 57
  58. 58. d. イベントDEMO VSUG DAY 2010.12.11 58
  59. 59. まとめ検証 ① ValidationRule ② Exception ③ IDataErrorInfo ④ INotifyDataErrorInfoアクション a. ErrorTemplate添付プロパティ b. VisualStateManager(VSM) c. HasError添付プロパティ(プロパティトリガー) d. イベント VSUG DAY 2010.12.11 59
  60. 60. 検証のまとめ図 ① ② ③ ④ ValidationRule Exception IDataErrorInfo INotifyDataErr orInfo検証処理実装 バインディング バインディング バインディング バインディング場所 ターゲット ソース ソース ソース検証属性の利用 - ✔ ✔ ✔文字列以外の ✔ - - ✔検証エラー内容複数の検証 - - - ✔エラー通知任意のタイミン - - - ✔グで検証利用可能プラッ WPF 4 WPF 4 WPF 4トフォーム Silverlight 4 Silverlight 4 Silverlight 4 Windows Phone VSUG DAY 2010.12.11 60
  61. 61. アクションのまとめ図 a. b. c. d. ErrorTemplate VisualStateMa HasError添付プ イベント 添付プロパティ nager(VSM) ロパティ(プロパ ティトリガー)サポートされる 有効 有効 有効検証結果 無効 無効(フォーカス有) 無効 無効 無効(フォーカス無) ※フォーカス対応化アクションの記 XAML XAML XAML コード述 (コードの場合 GetHasErrorメソッド)遷移アニメー - ✔ ✔ションサポート対象コントロー - - ✔ ✔ルと無関係の要素の外観を変更利用可能プラッ WPF 4 WPF 4 WPF 4 WPF 4トフォーム Silverlight 4 Silverlight 4 Silverlight 4 Windows Phone Windows Phone Windows Phone VSUG DAY 2010.12.11 61
  62. 62. “入力チェック”とは UIが受け取ったユーザー入力の妥当性を 検証し、結果に応じて何らかの アクションをとること ユーザー入力後、コントロールに保持されて いる入力値を検証し、結果に応じてユーザー への通知を行うというアクションをとる ユーザー入力時に入力を検証し、結果に応じ てその入力を無効にする/有効な入力に変換 するというアクションをとる VSUG DAY 2010.12.11 62
  63. 63. 検証タイミングで異なる開発面の特徴入力後 プロパティ値を確認するという 単純処理であるため、難易度が低い 様々なケースに対応できる反面、 汎用化が難しい入力中 キー入力に加え、マウス操作、貼り付け、 カレット制御などを考慮する必要がある プリミティブな部分での実装が必要となり 難易度が高い VSUG DAY 2010.12.11 63
  64. 64. InputManファミリー 日本の業務アプリケーションに求められる 高度な入力支援機能を提供するコントロール集 for Silverlight for WPF for Windows for ASP.NET Forms VSUG DAY 2010.12.11 64
  65. 65. InputMan for Silverlight 1.0JSilverlight標準に不足している業務コントロールをカバー GcTextBox テキストコントロール GcMask マスクコントロール GcDateTime 日付コントロール GcNumber 数値コントロール GcDropDownCalculator ドロップダウン電卓コントロール GcDropDownCalendar ドロップダウンカレンダーコントロール GcValidationIndicator 検証インジケータコントロール GcImeManager ふりがな取得コンポーネント 和暦の表示/入力(M・T・S・Hや元年表示にも対応) 文字種指定の入力制御(ひらがな、カタカナ、記号、全角、半角、 スペース、サロゲートペア文字など) ノンコーディングでフォーカス制御 フリガナ自動取得 祝日の登録や曜日のスタイルを設定できるカレンダー VSUG DAY 2010.12.11 65
  66. 66. GcTextBox.Formatプロパティ<im:GcTextBox Format="Aa9" /> WPF 4 Silverlight 4 全角 半角 説明 A A 大文字のアルファベット(A~Z) a a 小文字のアルファベット(a~z) K K カタカナ(促音・拗音の小書き表記あり) N N カタカナ(促音・拗音の小書き表記なし) 9 9 数字(0~9) # # 数字および数字関連記号(0~9、+ - $ % ¥ , .) @ @ 記号(! " # $ % & ( ) - = ^ ~ ¥ | @ ` [ { ; + : * ] } , < . > / ? _) B B 2進数(0または1) X X 16進数(0~9、A~F) J - ひらがな(促音・拗音の小書き表記あり) G - ひらがな(促音・拗音の小書き表記なし) Z - すべての全角文字 T - サロゲート ペア文字 S S 空白文字 - H すべての半角文字 - ^ 指定した書式に含まれないすべての文字 - ¥ エスケープシーケンス VSUG DAY 2010.12.11 66
  67. 67. 67
  68. 68. Appendix VSUG DAY 2010.12.11 68
  69. 69. 検証属性の自動適用 Silverlight 4 VSUG DAY 2010.12.11 69
  70. 70. 検証属性の自動適用Silverlight 4のDataGrid データ注釈を使用したデータ クラスのカスタマイズ http://msdn.microsoft.com/ja-jp/library/dd901590.aspxWCF RIA Services How to: Validate Data http://msdn.microsoft.com/en-us/library/ee707335.aspx VSUG DAY 2010.12.11 70
  71. 71. 検証ルールの実行タイミング WPF 4 VSUG DAY 2010.12.11 71
  72. 72. ValidationRule.ValidationStepプロパティValidationSt 説明 ExceptionVa DataErrorVa ValidationR ep 列挙値 lidationRule lidationRule uleを継承し たカスタムク ラスRawPropose 変換が行われ デフォルト 不可 デフォルトdValue る前ConvertedPr 変換が行われoposedValu た後 可 不可 可eUpdatedVal ソースの更新 可 可 可※ue 後CommittedV 値がソースにalue コミットされ 可 デフォルト 可※ た後※Validationメソッドの引数valueはBindingExpressionオブジェクト WPF 4 VSUG DAY 2010.12.11 72
  73. 73. BindingGroup WPF 4 VSUG DAY 2010.12.11 73
  74. 74. BindingGroupプロパティ 以下の条件のどちらかを満たしている場合、 Bindingがグループ化される BindingのソースとBindingGroupを設定した要素の DataContextが同じ BindingのBindingGroupNameプロパティが BindingGroupのNameと同じ<Grid.BindingGroup> <BindingGroup> <BindingGroup.ValidationRules> <local:ObjectValidation/> </BindingGroup.ValidationRules> </BindingGroup></Grid.BindingGroup> WPF 4 VSUG DAY 2010.12.11 74
  75. 75. 個々の検証をまとめて実行Bindingがグループ化されることにより、 各Bindingは個別に更新されなくなる。任意のタイミングで一気にすべての項目を更新させることが可能個々の検証をまとめて実行できる。 個々ValidationRuleは、ValidationStepがRawProposedValueであるもののみがBindingGroupの ValidationRuleよりも前に実行される。 VSUG DAY 2010.12.11 75
  76. 76. 編集トランザクションメソッド名 説明BeginEdit 編集トランザクションを開始します。CommitEdit すべてのValidationRuleを実行し、 成功した場合はバインディングソースを更新します。CancelEdit 編集トランザクションを終了し、保留中の変更を破棄します。 VSUG DAY 2010.12.11 76
  77. 77. 編集トランザクションPrivate Sub SubmitButton_Click(ByVal sender As System.Object,ByVal e As System.Windows.RoutedEventArgs) If LayoutRoot.BindingGroup.CommitEdit() Then MessageBox.Show("登録されました。") LayoutRoot.BindingGroup.BeginEdit() End IfEnd SubPrivate Sub CancelButton_Click(ByVal sender As System.Object,ByVal e As System.Windows.RoutedEventArgs) LayoutRoot.BindingGroup.CancelEdit() LayoutRoot.BindingGroup.BeginEdit()End Sub WPF 4 VSUG DAY 2010.12.11 77

×