In genere, quando si vuole utilizzare un evento di interfaccia utente, nel rispetto della metodologia MVVM, creiamo un Attached Property
:
public static DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached("IsFocused", typeof(bool), typeof(TextBoxProperties), new UIPropertyMetadata(false, OnIsFocusedChanged));
public static bool GetIsFocused(DependencyObject dependencyObject)
{
return (bool)dependencyObject.GetValue(IsFocusedProperty);
}
public static void SetIsFocused(DependencyObject dependencyObject, bool value)
{
dependencyObject.SetValue(IsFocusedProperty, value);
}
public static void OnIsFocusedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
{
TextBox textBox = dependencyObject as TextBox;
bool newValue = (bool)dependencyPropertyChangedEventArgs.NewValue;
bool oldValue = (bool)dependencyPropertyChangedEventArgs.OldValue;
if (newValue && !oldValue && !textBox.IsFocused) textBox.Focus();
}
Questa proprietà viene utilizzata in questo modo:
<TextBox Attached:TextBoxProperties.IsFocused="{Binding IsFocused}" ... />
allora possiamo focalizzare lo TextBox
dal modello di visualizzazione cambiando la proprietà IsFocused
a true
:
IsFocused = false; // You may need to set it to false first if it is already true
IsFocused = true;
Concetto: crea un comportamento associato o un controllo personalizzato: dispone di una nuova proprietà di dipendenza che, se impostata su true, mette a fuoco tale controllo e lo imposta su false, quindi sei pronto per la prossima volta impostato su true. – bland
Per l'input dell'utente, il controllo ha già lo stato attivo, giusto? Per i cambiamenti programmatici dei valori di controllo, in che modo si garantisce che un solo controllo non convalidi? Se più controlli fallirebbero la validazione, quale sarebbe il prescelto per focalizzarsi? – elgonzo