NuGetからさくっとインストールできるはずです。
変わった点の説明
ReactivePropertyには、値の検証を行う方法がいくつかります。
- SetValidateNotifyErrorメソッドでラムダ式内で値の検証ロジックを書く方法
- SetValidateAttributeメソッドでSystem.ComponentModel.DataAnnotationsの属性べーうでの検証を行うようにする方法
PCLに移植する前のReactivePropertyでは、最初のメソッドがINotifyDataErrorInfo、2つ目のメソッドをIDataErrorInfoで管理していました(と思います)。PCLにはIDataErrorInfoが無くてINotifyDataErrorInfoに一本化されたため、ReactivePropertyをPCLにするタイミングで、両方ともそっちに寄せました。
できなくなってたこと
管理場所が別だったのでSetValidateNotifyErrorとSetValidateAttributeを両方呼ぶことで属性での検証+ラムダ式での検証を両方走らせることが出来てましたが、一本化してしまったため、両方を同時に指定することができなくなってました…。あとからSetした検証方法のみ実行されるようになってました。
対処するための追加したメソッド
これまでの、SetValidateNotifyErrorメソッドとSetValidateAttributeメソッドに加えて、AddValidateNotifyErrorメソッドとAddValidateAttributeメソッドを追加して、1つのReactivePropertyに対して複数の検証方法を追加できるようにしました。
publicclass ValidationViewModel { [StringLength(5, ErrorMessage = "Length < 5")] public ReactiveProperty<string> ValidationBoth { get; private set; } public ValidationViewModel() { // SetValidateAttributeに、AddValidateNotifyErrorでラムダ式での検証ロジックを追加 ValidationBoth = new ReactiveProperty<string>() .SetValidateAttribute(() => ValidationBoth) .AddValidateNotifyError((string s) => string.IsNullOrEmpty(s) ? "required" : s.Cast<char>().All(Char.IsLower) ? null :"not all lowercase"); } }
とりあえず一安心。