way two raisepropertychanged property change wpf mvvm caliburn.micro

two - wpf binding textbox



Caliburn Micro: cómo establecer el enlace UpdateSourceTrigger? (1)

Simplemente configure el enlace explícitamente para esa instancia de TextBox y Caliburn.Micro no lo tocará:

<TextBox Text="{Binding Name, UpdateSourceTrigger=LostFocus}" />

Alternativamente, si desea cambiar el comportamiento predeterminado para todas las instancias de TextBox , puede cambiar la implementación de ConventionManager.ApplyUpdateSourceTrigger en el método Configure su programa de arranque.

Algo como:

protected override void Configure() { ConventionManager.ApplyUpdateSourceTrigger = (bindableProperty, element, binding) =>{ #if SILVERLIGHT ApplySilverlightTriggers( element, bindableProperty, x => x.GetBindingExpression(bindableProperty), info, binding ); #else if (element is TextBox) { return; } binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; #endif }; }

He estado explorando el Framework Micro MVVM de Caliburn solo para tener una idea, pero me he encontrado con un pequeño problema. Tengo un TextBox vinculado a una propiedad de cadena en mi ViewModel y me gustaría que la propiedad se actualice cuando el TextBox pierda el foco.

Normalmente lo conseguiría estableciendo UpdateSourceTrigger en LostFocus en el enlace, pero no veo ninguna manera de hacerlo en Caliburn, ya que me ha configurado el enlace de propiedad automáticamente. Actualmente, la propiedad se actualiza cada vez que cambia el contenido del TextBox.

Mi código es muy simple, por ejemplo aquí está mi VM:

public class ShellViewModel : PropertyChangeBase { private string _name; public string Name { get { return _name; } set { _name = value; NotifyOfPropertyChange(() => Name); } } }

Y, desde mi punto de vista, tengo un simple TextBox.

<TextBox x:Name="Name" />

¿Cómo puedo cambiarlo para que la propiedad Nombre solo se actualice cuando el TextBox pierda el foco, en lugar de cada vez que cambia la propiedad?