feature: Bind validation to non-string view properties
I maintainer di solito rispondono entro 3 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Partire dalle API esistenti BindValidation e OneWayBind, usando le firme generiche proposte e l’alternativa WhenAnyObservable come contesto comportamentale. Determinare come lo stato di validazione viene mappato a una proprietà di view non stringa tramite il selector; il lavoro è completato quando l’overload richiesto supporta il binding in stile Color preservando il comportamento di validazione esistente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Is your feature request related to a problem? Please describe.
Not related to a problem.
Describe the solution you'd like
So what I'm trying to do is change the color of control in my view based on the validation state of a validation helper. The control does have an error property or something similar, and I do not want to show an inline error message anyway for this particular situation. What I would like to be able to do is something like this:
this.BindValidation(ViewModel, viewModel => viewModel.Property, view => view.Control.Color,
validationState => validationState.IsValid ? Color.Green : Color.Red);
This would similar to the overload of the OneWayBind function that allows you to bind between types like so:
this.OneWayBind(ViewModel, viewModel => vm.BoolProperty, view => view.Control.Color,
boolProperty => boolProperty ? Color.Green : Color.Red);
Describe alternatives you've considered
Currently this is how I'm achieving the same effect:
this.WhenAnyObservable(v => v.ViewModel.PropertyValidator.ValidationChanged)
.Select(validationState => validationState.IsValid ? Color.Green : Color.Red)
.BindTo(this, v => v.Control.Color);
This works, and I don't necessarily hate it, but I would prefer the proposed form for brevity and to match with the rest of my simple bindings.
Describe suggestions on how to achieve the feature
I'm not sure exactly how to make this work or I probably just would have made done it and made PR, but I think the signatures of the overloads for such a change would look something like this:
public static IDisposable BindValidation<TView, TViewModel, TViewModelProperty, TViewProperty>(
this TView view,
TViewModel? viewModel,
Expression<Func<TViewModel, TViewModelProperty>> viewModelProperty,
Expression<Func<TView, TViewProperty>> viewProperty,
Expression<Func<IValidationState, TViewProperty>> selector,
IValidationTextFormatter<string>? formatter = null)
where TView : IViewFor<TViewModel>
where TViewModel : class, IReactiveObject, IValidatableViewModel
and this:
public static IDisposable BindValidation<TView, TViewModel, TViewProperty>(
this TView view,
TViewModel? viewModel,
Expression<Func<TViewModel?, ValidationHelper?>> viewModelHelperProperty,
Expression<Func<TView, TViewProperty>> viewProperty,
Expression<Func<IValidationState, TViewProperty>> selector,
IValidationTextFormatter<string>? formatter = null)
where TView : IViewFor<TViewModel>
where TViewModel : class, IReactiveObject, IValidatableViewModel
Additional context
- Lingua principale
- C#
- Stelle
- 273
- Fork
- 30
- Merge medio
- 4g 10h
- PR unite (30g)
- 15
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di reactiveui/ReactiveUI.Validation
-
Dependency DashboardAperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 20/100
reactiveui/ReactiveUI.Validation#634 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
reactiveui/ReactiveUI.Validation#511 ·
I maintainer di solito rispondono entro 3 giorni
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
reactiveui/ReactiveUI.Validation#414 · 2 commenti ·
I maintainer di solito rispondono entro 3 giorni
-
feature: add benchmarksApertaPerformance
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
reactiveui/ReactiveUI.Validation#117 ·
I maintainer di solito rispondono entro 3 giorni
Tutte le issue di reactiveui/ReactiveUI.Validation
Issue simili
-
7.0
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
unoplatform/uno.extensions#3253 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Sector-Vestige/Sector-Vestige#476 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
PowerShell/platyPS#868 ·
-
S: Untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Trauma-Station/Trauma-Station#5058 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 2 giorni