Enviar pesquisa
Carregar
111008 silverlight square_datavalidation
•
0 gostou
•
792 visualizações
Takayoshi Tanaka
Seguir
Tecnologia
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 46
Baixar agora
Baixar para ler offline
Recomendados
知って得するC#
知って得するC#
Shota Baba
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19
Takuto Wada
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
基礎からのCode Contracts
基礎からのCode Contracts
Yoshifumi Kawai
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
Recomendados
知って得するC#
知って得するC#
Shota Baba
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
Try_to_writecode_practicaltest #atest_hack
Try_to_writecode_practicaltest #atest_hack
kimukou_26 Kimukou
xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19
Takuto Wada
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
基礎からのCode Contracts
基礎からのCode Contracts
Yoshifumi Kawai
Flutterを体験してみませんか
Flutterを体験してみませんか
cch-robo
C# コーディングガイドライン 2013/02/26
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16
Takuto Wada
Mvpvm pattern
Mvpvm pattern
Mami Shiino
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
HttpClientModule
HttpClientModule
Kentarou Takeda
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
emorins
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
最近の単体テスト
最近の単体テスト
Ken Morishita
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
C#の書き方
C#の書き方
信之 岩永
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
Apexデザインパターン
Apexデザインパターン
Salesforce Developers Japan
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
T93 com入門
T93 com入門
伸男 伊藤
Laravelとテストについて
Laravelとテストについて
Takeo Noda
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
Interaction channel
Interaction channel
信之 岩永
敏捷产品研发
敏捷产品研发
Tianshuo Hu
Scrum培训
Scrum培训
Tianshuo Hu
Mais conteúdo relacionado
Mais procurados
xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16
Takuto Wada
Mvpvm pattern
Mvpvm pattern
Mami Shiino
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
HttpClientModule
HttpClientModule
Kentarou Takeda
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
emorins
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
Shinya Mochida
最近の単体テスト
最近の単体テスト
Ken Morishita
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
信之 岩永
C#の書き方
C#の書き方
信之 岩永
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Yoshihisa Ozaki
Apexデザインパターン
Apexデザインパターン
Salesforce Developers Japan
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
T93 com入門
T93 com入門
伸男 伊藤
Laravelとテストについて
Laravelとテストについて
Takeo Noda
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
Interaction channel
Interaction channel
信之 岩永
Mais procurados
(20)
xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16
Mvpvm pattern
Mvpvm pattern
Code Contracts in .NET 4
Code Contracts in .NET 4
HttpClientModule
HttpClientModule
DoActionからJava VMバイトコードに変換する話
DoActionからJava VMバイトコードに変換する話
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
最近の単体テスト
最近の単体テスト
今からでも遅くないC#開発
今からでも遅くないC#開発
C#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
C#の書き方
C#の書き方
C#coding guideline その2_20130325
C#coding guideline その2_20130325
Apexデザインパターン
Apexデザインパターン
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
T93 com入門
T93 com入門
Laravelとテストについて
Laravelとテストについて
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
Interaction channel
Interaction channel
Destaque
敏捷产品研发
敏捷产品研发
Tianshuo Hu
Scrum培训
Scrum培训
Tianshuo Hu
Scientific Writing Task 3
Scientific Writing Task 3
Ikhsan Assaat
Powerpointforslideshare
Powerpointforslideshare
Jeff King
About me
About me
Jeff King
quest diagnostics 2008ProxyCard
quest diagnostics 2008ProxyCard
finance34
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
Ontico
Erlang kansai01
Erlang kansai01
Takayuki Kurosawa
Predigtpräsentation 2008 11 16, H G, Heilung
Predigtpräsentation 2008 11 16, H G, Heilung
wusternberg
Destaque
(9)
敏捷产品研发
敏捷产品研发
Scrum培训
Scrum培训
Scientific Writing Task 3
Scientific Writing Task 3
Powerpointforslideshare
Powerpointforslideshare
About me
About me
quest diagnostics 2008ProxyCard
quest diagnostics 2008ProxyCard
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить / Сергей Авер...
Erlang kansai01
Erlang kansai01
Predigtpräsentation 2008 11 16, H G, Heilung
Predigtpräsentation 2008 11 16, H G, Heilung
Semelhante a 111008 silverlight square_datavalidation
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
Jun-ichi Sakamoto
CruiseControl.NET設置
CruiseControl.NET設置
Kuniaki Igarashi
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
継続的8章
継続的8章
shinjiyoshida
CodeIgniter入門
CodeIgniter入門
Sho A
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
niwatako
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
真吾 吉田
はじめてのCodeIgniter
はじめてのCodeIgniter
Yuya Matsushima
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Masaki Yamamoto
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
ShuheiUda
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
Masashi Shinbara
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
Yuta Matsumura
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Takuya Tsuchida
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Yuji Takayama
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
Kazuki Nakajima
20120507 zendform
20120507 zendform
Yusuke Ando
ソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
Toru Tamaki
Semelhante a 111008 silverlight square_datavalidation
(20)
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
CruiseControl.NET設置
CruiseControl.NET設置
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
継続的8章
継続的8章
CodeIgniter入門
CodeIgniter入門
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
はじめてのCodeIgniter
はじめてのCodeIgniter
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
Azure サポート エンジニア直伝 ~ PowerShell 実践活用術 ~
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
勉強会force#3 iOSアプリ開発
勉強会force#3 iOSアプリ開発
20120507 zendform
20120507 zendform
ソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
Mais de Takayoshi Tanaka
deep dive distributed tracing
deep dive distributed tracing
Takayoshi Tanaka
202202 open telemetry .net handson
202202 open telemetry .net handson
Takayoshi Tanaka
202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineers
Takayoshi Tanaka
20210129 azure webapplogging
20210129 azure webapplogging
Takayoshi Tanaka
20201127 .NET 5
20201127 .NET 5
Takayoshi Tanaka
Unity(再)入門
Unity(再)入門
Takayoshi Tanaka
最近のQ#について
最近のQ#について
Takayoshi Tanaka
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
Takayoshi Tanaka
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET
Takayoshi Tanaka
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservability
Takayoshi Tanaka
C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)
Takayoshi Tanaka
20190806 Q# Measurements
20190806 Q# Measurements
Takayoshi Tanaka
C#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオン
Takayoshi Tanaka
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
Takayoshi Tanaka
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
Takayoshi Tanaka
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
Takayoshi Tanaka
Try! Visual Studio 209 git feature
Try! Visual Studio 209 git feature
Takayoshi Tanaka
Q#基礎 ver1.1
Q#基礎 ver1.1
Takayoshi Tanaka
(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0
Takayoshi Tanaka
ゼロから始めるQ#
ゼロから始めるQ#
Takayoshi Tanaka
Mais de Takayoshi Tanaka
(20)
deep dive distributed tracing
deep dive distributed tracing
202202 open telemetry .net handson
202202 open telemetry .net handson
202109-New_Relic-for-csharp-engineers
202109-New_Relic-for-csharp-engineers
20210129 azure webapplogging
20210129 azure webapplogging
20201127 .NET 5
20201127 .NET 5
Unity(再)入門
Unity(再)入門
最近のQ#について
最近のQ#について
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
20191024 Get Start gRPC with ASP.NET
20191024 Get Start gRPC with ASP.NET
New Relicで始める、.NET Applications on AWSのObservability
New Relicで始める、.NET Applications on AWSのObservability
C#エンジニアのためのdocker kubernetesハンズオン (再)
C#エンジニアのためのdocker kubernetesハンズオン (再)
20190806 Q# Measurements
20190806 Q# Measurements
C#エンジニアのためのdocker kubernetesハンズオン
C#エンジニアのためのdocker kubernetesハンズオン
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
Try! Visual Studio 209 git feature
Try! Visual Studio 209 git feature
Q#基礎 ver1.1
Q#基礎 ver1.1
(過去バージョン) Q#基礎 ver1.0
(過去バージョン) Q#基礎 ver1.0
ゼロから始めるQ#
ゼロから始めるQ#
111008 silverlight square_datavalidation
1.
入力データ検証を使いこなそう
Silverlightを囲む会in東京#4 田中 孝佳(@tanaka_733)
2.
はじめに
3.
サンプルアプリの公開 説明に使うサンプルアプリを公開しています – http://techblog.hilife-
jp.info/2011/10/silverlightin4.html – PC持参の方はぜひどうぞ – IS12T, Win8MetroUIではだめですm(_ _)m ソースコードはこちらで公開しています – https://skydrive.live.com/?cid=B43F4832F5 BAFBB9&id=B43F4832F5BAFBB9%211121#
4.
で、公開してるブログの紹介 銀の光と藍い空 –
http://techblog.hilife-jp.info/ Silverlight(Web), WP7, Azure, Kinect ネタが中心です 最近はSilverlight 5 シリーズやってます – http://techblog.hilife- jp.info/search/label/Silverlight5
5.
自己紹介 (@tanaka_733) ERPパッケージベンダーの研究部門 –
クラウドを使っていい感じにする研究 Silverlightは業務アプリ開発で使ってます – サーバーサイドはJava – 前回発表したものです https://skydrive.live.com/view.aspx?cid=B43F483 2F5BAFBB9&resid=B43F4832F5BAFBB9%211128 今回から 囲む会in東京 の運営にも 参加しています WP7, Kinect, クラウド関連の勉強会 にも出現します
6.
なぜクライアントサイドの 入力データ検証が必要なのか
7.
サーバーサイド検証との違い サーバーサイドの検証は信頼性のため そして業務用要件を満たすため –
SQLインジェクションなどを防ぎたい – 業務的にありえない値を入力させたくない クライアントサイド検証はUX向上 – サーバーサイド検証だけだと応答性が悪い – どんな値を入力すればいいか伝えてあげる 単にNGを出せばいいわけではない
8.
サーバーサイド検証
Client Server 検 証 検 証 API呼び出し
9.
クライアントサイドに求められる事 あらかじめ入力形式を教えてあげる – 入力データ検証を助けるため 入力形式が誤っていた時、
どう修正すればいいか伝える – よくない例
10.
入力データ検証を実装するには
11.
WebフォームだとJSが基本 HTMLは静的なので単体では検証できない – サーバーサイドで毎回検証するのは
通信コスト・サーバーの処理コストがかかる そこでJavaScriptの出番 – でもサーバーサイドでの検証も必要ですよ JavaScriptが無効だったり、 フォームを通さず通信されたりします 公開APIを用意すると、 もはやサーバーサイド検証のみ
12.
Silverlightでの検証 入力検証の仕組みが用意されています –
ASP.NET の検証コントロール的なもの WCF RIA Servicesなど使えば、 サーバーサイドとコードを共有する ことも可能 – ただし今回はやりません – どちらもC#/VB であることの強みですね
13.
Silverlightにおける 入力データ検証の実装
14.
用意されているもの UI部品 – DataForm
(ちょっと特殊なので今回はなし) – Label – DescriptionViewer – ValidationSummary – TextBox, ComboBoxなど入力系UI 検証ロジック – いくつかのやり方が存在
15.
UI部品を使ったサンプルアプリ このアプリを例にとって説明していきます
16.
その前に前提条件 MVVMでの実装です – 今回の実装にはPrismを使っていますが、
MVVMサポートライブラリに依存しない話です – ViewとViewModelの分離と Bindingが重要 検証ロジックはViewModel側に定義します 今回はロジックがないのでModelは出てきません Silverlight4 です (5 RCでも動作を確認) Rx使ってます – 非同期検証を簡単に書きたかったから
17.
VM側の実装方法
18.
データ検証の実装方法いろいろ 検証方法の定義 – 自前の検証関数で定義
– DataAnnotationsで定義 VMでの実装方法 – 検証してNGだったら例外を投げる – IDataErrorInfoをVMが実装する – INotifyDataErrorInfoをVMが実装する
19.
データ検証の実装方法 検証方法の定義
個人的に – 自前の検証関数で定義 おすすめ – DataAnnotationsで定義 VMでの実装方法 – 検証してNGだったら例外を投げる – IDataErrorInfoをVMが実装する – INotifyDataErrorInfoをVMが実装する
20.
おすすめの理由 DataAnnotations – 検証ロジックを宣言的に記述できる
if (str.Length >= 8 && str.Length <= 20) とか書かなくていい – Label, DataformなどUIとの相性がよい INotifyDataErrorInfo – 例外を投げる=処理が中断される のが嫌い – IDataErrorInfoより改善されている
21.
Data Annotationsの使い方
22.
DataAnnotationsの使い方 プロパティにAnnotationを付与 Annotationに従って検証する処理を追加 – Validator.TryValidateProperty
や TryValidateObjectで検証できる 今回はINotifyDataErrorInfo を実装したViewModelの基底クラス内 で記述します
23.
DataAnnotations一覧 検証属性
説明 CustomValidationAttribute 検証用にカスタム メソッドを使用します。 特定の種類のデータ (電子メール アドレス、 DataTypeAttribute 電話番号など) を指定します。 EnumDataTypeAttribute 値が列挙体に含まれることを保証します。 RangeAttribute 最小値および最大値の制約を指定します。 RegularExpressionAttribute 正規表現を使用して有効な値を指定します。 RequiredAttribute 値が必須であることを指定します。 StringLengthAttribute 最大文字数および最小文字数を指定します。 ValidationAttribute 検証属性の基本クラスとして動作します。 http://msdn.microsoft.com/ja-jp/library/dd901590%28v=vs.95%29.aspx
24.
DataAnnotationsの使い方 プロパティに付加する
setterのコードは後で。
25.
DataAnnotationsの欠点 複雑な検証ロジックは カスタム検証メソッドが必要 –
例えば、IPv4アドレスとかCIDRとか – 正規表現でできるかもしれないけど、 複雑な正規表現はわかりづらい 複数プロパティ間の検証がしづらい – 開始日は終了日より前とか – プロコトル一覧の選択がTCPなら ポート番号が入力必須とか
26.
カスタム検証メソッドの定義 検証メソッドは下記の条件を満たすこと – publicなクラスで定義
– public staticなメソッド – 返り値はValidationResult 成功時はValidationResult.Success – 第一引数は検証対象の値を表すオブジェクト – 第二引数は任意 検証要求についての追加情報を提供する ValidationContext
27.
カスタム検証メソッドの例 IPv4アドレスをチェックする – IPAddress.TryParse
メソッドを使用 – ValicationContextは使っていないので省略可
28.
INotifyDataErrorInfo の使い方
29.
IDataErrorInfoと INotifyDataErrorInfoの違い MSDNにはこう書いてます –
一般に、Silverlight の新しいエンティティ ク ラスでは、IDataErrorInfo を実装するのでは なく、INotifyDataErrorInfo を実装して、柔 軟性を高める必要があります。 IDataErrorInfoの特徴 – オブジェクトにつき1つのエラーメッセージ – 検証のタイミングはBinding時のみ
30.
INotifyDataErrorInfo メンバ HasErrors プロパティ
– オブジェクトの検証エラーが発生しているかどう かを示します GetErrors メソッド – 指定されたプロパティまたはオブジェクト全体の 検証エラーを含む IEnumerableを返します – IEnumerableの要素はToStringメソッドでエ ラーメッセージを返す ErrorsChanged イベント – IEnumerable が変更されるたびに、ユーザー イ ンターフェイス (UI) スレッド上で発生させる
31.
INotifyDataErrorInfoの実装例 ViewModelに実装させたいことが多い そこで、ViewModelの基底クラスとして INotifyPropertyChangedと一緒に実装 使用するMVVMインフラに合わせて 実装しておくと便利
– Prismの場合、 INotifyPropertyChanged を 実装したNotificationObjectを継承し、 検証結果を格納するErrorsContainerを使い ます
32.
INotifyDataErrorInfoの実装例
ViewModelBaseクラス ValidateProperty, ValidateObject メソッド を呼ぶと検証する 検証するとその結果を ErrorsContainerに格納 検証結果に変更があると、 ErrorsChanged イベント ハンドラを呼び出す
33.
この実装の注意点 初期化時の値のままだと、 検証は起きません –
最初から検証すると、 入力画面がいきなり真っ赤でやな感じ なにも入力せずに送信する事があるので、 TryValidateObjectを必ず行う
34.
プロパティの実装 コードスニペットにしておくのがお手軽 <Code
Language="csharp"> <![CDATA[#region $property$ private $type$ $var$; public $type$ $property$ { get { return $var$; } set { if ($var$ == value) { return; } $var$ = value; RaisePropertyChanged("$property$"); ValidateProperty("$property$", value); } } #endregion $end$]]> </Code>
35.
複数プロパティの関連の検証
36.
複数プロパティの関連を検証 DataAnnotationでは単一プロパティしか 検証できない 方法は2つ(もしくはそれ以上) –
ValidationContext経由で検証に必要な ほかのプロパティを渡す – ValidatePropertyメソッドなどを継承して、 そのオブジェクト特有の検証処理を追加する
37.
ValidationContextを使う方法 ValidationContext.Items に必要な値をキーを指定して渡す 検証メソッドでは必要な値を取り出す
38.
UIコンポーネントの使い方
39.
使えるUIコンポーネント 入力系UI –
検証時にポップアップ Label – 必須入力時にVisualStateが代わる – Display要素でLabelのContentを指定できる DescriptionViewer – メッセージを表示 ValidationSummary – メッセージを一覧表示
40.
入力系UIでの設定 ValidationSummary使用時には Bindingオプションを指定します
41.
Windows Phone 7
では 入力UIの検証属性は存在する 検証系のUIは非サポートとの記述 実際に検証属性を使っても何も起きな かった 要はUI側のデータ検証は使えない – 画面が小さいので そんな面倒な入力はさせるなってこと!? ロジック内でのデータ検証には使えそう
42.
+α 非同期の検証が必要なとき 検証はクライアントサイドのみで完結が原則 –
この場合の検証は同期処理でOK しかし、例えば・・・ – SNSの入会フォームで ユーザーIDの存在チェックは それだけ先にチェックしたい! – 検証している間に他の項目を入力できる この場合非同期の検証が必要 – Silverlightだと通信がからむので必須
43.
+α 非同期の検証の実装 INotifyPropertChangedを実装している 場合、
非同期処理の最後でGetErrorsの結果を変 更してErrorsChangedを呼べばよい 今回のViewModelBaseの場合は、 ErrorsContainerに追加しさえすればOK
44.
+α 非同期の検証の実装サンプル おなじみ(?)のRx使ってます
実際は、3秒待ってではなく、 通信してWebResponseなりを見て検証する LTで面白い話があるそうなのでそれも期待
45.
ご清聴 ありがとうございました
Baixar agora