way two español wpf binding textbox

español - binding two way wpf



Cuadro de texto de WPF que solo actualiza el enlace cuando se presiona enter (3)

Aquí hay una versión completa de la idea proporcionada por Anderson Imes:

public static readonly DependencyProperty UpdateSourceOnKeyProperty = DependencyProperty.RegisterAttached("UpdateSourceOnKey", typeof(Key), typeof(TextBox), new FrameworkPropertyMetadata(Key.None)); public static void SetUpdateSourceOnKey(UIElement element, Key value) { element.PreviewKeyUp += TextBoxKeyUp; element.SetValue(UpdateSourceOnKeyProperty, value); } static void TextBoxKeyUp(object sender, KeyEventArgs e) { var textBox = sender as TextBox; if (textBox == null) return; var propertyValue = (Key)textBox.GetValue(UpdateSourceOnKeyProperty); if (e.Key != propertyValue) return; var bindingExpression = textBox.GetBindingExpression(TextBox.TextProperty); if (bindingExpression != null) bindingExpression.UpdateSource(); } public static Key GetUpdateSourceOnKey(UIElement element) { return (Key)element.GetValue(UpdateSourceOnKeyProperty); }

todas. Tengo un usercontrol "NumericTextBox" que solo permite entradas numéricas. Necesito mostrar otro comportamiento especializado, es decir, lo necesito para poder vincularlo a un valor VM OneWayToSource y solo tengo la actualización del valor VM cuando presiono enter mientras enfoco el cuadro de texto. Ya tengo el evento EnterPressed que se activa cuando presiono la tecla, me cuesta mucho encontrar la manera de hacer que esa acción actualice el enlace ...


En su expresión de enlace, establezca UpdateSourceTrigger en explícito.

Text="{Binding ..., UpdateSourceTrigger=Explicit}"

Luego, al manejar el evento EnterPressed, llame a UpdateSource en la expresión de enlace, esto empujará el valor del cuadro de texto a la propiedad de límite real.

BindingExpression exp = textBox.GetBindingExpression(TextBox.TextProperty); exp.UpdateSource();


Si está utilizando MVVM, puede usar una combinación del enfoque de decastelijau junto con una propiedad adjunta personalizada que llama a UpdateSource en el cuadro de texto cuando PreviewKeyUp.

public static readonly DependencyProperty UpdateSourceOnKey = DependencyProperty.RegisterAttached( "UpdateSourceOnKey", typeof(Key), typeof(TextBox), new FrameworkPropertyMetadata(false) ); public static void SetUpdateSourceOnKey(UIElement element, Key value) { //TODO: wire up specified key down event handler here element.SetValue(UpdateSourceOnKey, value); } public static Boolean GetUpdateSourceOnKey(UIElement element) { return (Key)element.GetValue(UpdateSourceOnKey); }

Entonces puedes hacer:

<TextBox myprops:UpdaterProps.UpdateSourceOnKey="Enter" ... />