入力テキストのcetain条件が満たされていない場合、特定のエラーメッセージを設定しようとしています。入力されたURLが空の場合反応的なUI共有観測可能な論理
は基本的に、私は
を「サーバーのURLがhttpsで始まる必要があります」でなければなりません入力されたURLがhttps ErrorHintに起動しない場合ErrorHintが「サーバーのURLを空にすることはできません」に設定したいです
それ以外の場合、ErrorHintは空の文字列にする必要があります。
以下のコードは機能しますが、私は観察対象のロジックを複製しているように感じます。これを行うためのよりクリーンな方法がありますか?
// invalid if the server url is empty
var serverUrlEmptyObservable =
this.WhenAnyValue(x => x.NewServerUrl)
.Where(string.IsNullOrWhiteSpace);
// invalid if the url is not empty but does not start with https
var serverUrlInvalidPrefixObservable =
this.WhenAnyValue(x => x.NewServerUrl)
.Where(x => !string.IsNullOrWhiteSpace(x))
.Where(x => !x.StartsWith(NewServerUrlRequiredPrefix));
// valid if the server url is not empty and starts with proper prefix
var validServerUrlObservable =
this.WhenAnyValue(x => x.NewServerUrl)
.Where(x => !string.IsNullOrWhiteSpace(x))
.Where(x => x.StartsWith(NewServerUrlRequiredPrefix));
// set error message based on which observable fires
ErrorHint = Observable.Merge(
validServerUrlObservable.Select(x => ""),
serverUrlInvalidPrefixObservable.Select(x => $"Server URL must start with {NewServerUrlRequiredPrefix}"),
serverUrlEmptyObservable.Select(x => "Server URL cannot be empty"));