タグ: WPF

WPFでもValidationAttributeのメッセージリソースの既定値を設定したい - その2

前回の記事、WPFでもValidationAttributeのメッセージリソースの既定値を設定したいの最後の方で「ReactivePropertyにも対応したい」ということでReactiveProperty用の拡張メソッドも作ってみました。

でも、ひとつひとつに設定するのも面倒ですよねぇ。

ということで、ReactiveProperty用にクラスライブラリプロジェクト(DataValidation.ReactiveProperty)を追加して、まとめて処理するヘルパメソッドを追加してみました。

ソースは前回のものをそのまま修正してGitHubのこちらに置いてあります。


2019/09/28
.NET Core 3.0でWPFしてみました。Nekoni.DataValidation
という記事で.NET Core 3.0のサンプルプロジェクトを追加しています。併せてご覧ください。


WPFでもValidationAttributeのメッセージリソースの既定値を設定したい

WPFにてViewModelやModelでデータ検証を行う際に System.ComponentModel.DataAnnotationsの検証属性を使用することが多いのではないかと思います。その場合、メッセージリソースと共に使用したいんじゃないかと思いますが、

/// <summary>
/// メールアドレス
/// </summary>
[Display(Name = "メールアドレス")]
[Required(ErrorMessageResourceType=typeof(ErrorMessage), ErrorMessageResourceName="Required")]
[EmailAddress(ErrorMessageResourceType=typeof(ErrorMessage), ErrorMessageResourceName="EmailAddress")]
public string MailAddress {
    get =>  _MailAddress;
    set
    {
        if (_MailAddress == value) return;
        _MailAddress = value;
        OnPropertyChanged();
    }
}
private string _MailAddress;

のように、エラーメッセージリソースのTypeとリソースキーを指定することになります。
この記述、例えば必須チェックのメッセージなんて全て一緒になることがほとんどなのに、全ての項目にやたら長い属性指定を付けなければいけません。

ASP.NET MVCには DefaultModelBinder.ResourceClassKey や、~AttributeAdapterを使って既定のメッセージリソースを指定する方法があります。

今回は「WPFでもどうにかならないのか?」と思い1週間ほど格闘してみました。
場合によってはWPF以外でも使える...かもしれません。

格闘結果のソースはGitHubのこちらに置いてあります。
煮るなり焼くなりお好きにどうぞ。


part2の記事を書きました。
これに伴い、GitHubのソースも変更しています。


2019/09/28、さらにさらに、
.NET Core 3.0でWPFしてみました。Nekoni.DataValidation
という記事で.NET Core 3.0のサンプルプロジェクトを追加しています。併せてご覧ください。
本記事中のConfigurationクラスは上記の記事中で、ValidationConfigという名前に変更しています。
最新ソースと一緒に本記事を読まれている方は、適宜読み換えていただけると幸いです。