我想設置一個特定的錯誤消息,如果cetain條件輸入文本不符合。反應式用戶界面共享可觀察邏輯
基本上,如果輸入的網址是空的,我想設置ErrorHint爲「服務器URL不能爲空」
如果輸入的URL不以https ErrorHint開始應該是「服務器URL必須以https開頭的」
否則,ErrorHint應該是一個空字符串。
下面的代碼工作,但我覺得我在我的observables複製邏輯。有沒有更乾淨的方法來做到這一點?
// 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"));