かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

ReactiveProperty v0.4.2-beta1をリリースしました

今回は、じんぐるさんとバリデーションまわりを色々検討した結果、過去のIDataErrorInfoクラスを実装していた時のしがらみを決して、ちょっと非互換がある変更をしています。

まずは、ObserveErrorChangedメソッドのシグネチャが変わってます。INotifyErrorInforを実装しているだけなので、エラー情報は必ずIEとして流れてくるので、objectからIEに変更しました。

    public interface IReactiveProperty
    {
        object Value { get; set; }
-       IObservable<object> ObserveErrorChanged { get; }
+       IObservable<IEnumerable> ObserveErrorChanged { get; }
    }

今まで、このObserveErrorChangedにstring自体が流れてくることがありましたが、今回の変更でIEになります。そのため、エラーのハンドリングは、以下のようなコードになります。

// before
var errorProperty = hoge.ObserveErrorChanged.OfType<string>().ToReactiveProperty();

// after
var errorProperty = hoge.ObserveErrorChanged.Select(x => x == null ? null : x.OfType<string>().FirstOrDefault()).ToReactiveProperty();

ちょっとめんどくさくなってしまいましたが、本来IEで複数のエラーを返すところをstringがIEを実装しているからとstringをそのまま流してたのが悪かったです。はい。

ということでDLなどは以下からできます。