c# - español - wpf data template
WPF Binding Textbox to ViewModel (6)
Cambie su enlace para actualizar la fuente siempre que la propiedad cambie:
<TextBox Text="{Binding DatabaseFilter, UpdateSourceTrigger=PropertyChanged}">
Tengo un cuadro de texto que está vinculado a una propiedad en mi ViewModel llamada DatabaseFilter
aquí está la implementación de la propiedad
public string DatabaseFilter {
get { return _databaseFilter; }
set {
_databaseFilter = value;
FilterDatabases();
}
}
como puede ver, estoy intentando activar un filtro basado en lo que se escribe en el cuadro de texto.
El problema es que el colocador se activa cuando el cuadro de texto pierde el foco. Así que escribir en el cuadro de texto no está haciendo nada, hasta que el usuario presiona TAB.
¿Es posible hacer que la actualización vinculante controle el modelo de vista con cada pulsación de tecla a través del enlace? Me gustaría evitar tener que agregar eventos clave de bajada / subida, para mantener la UI / codebehind tan limpia como sea posible.
Cree un comando en su VM "FilterDatabaseCommand", el enlace del evento "TextChanged" del cuadro de texto a este comando (use el comportamiento de EventToCommand).
O simplemente cambie su código a este:
public string DatabaseFilter {
get { return _databaseFilter; }
set {
if(_databaseFilter != value) {
_databaseFilter = value;
FilterDatabases();
}
}
}
Establezca UpdateSourceTrigger
en su TextBox a PropertyChanged
(que por defecto es LostFocus
)
Use la propiedad Binding.UpdateSourceTrigger
en su enlace. El activador predeterminado de la fuente de actualización es la pérdida de enfoque. Puede cambiarlo para que cada vez que el texto en el cuadro de texto cambie, se produzca la vinculación.
vea http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx
UpdateSourceTrigger=PropertyChanged
debería resolver este problema para usted
UpdateSourceTrigger=PropertyChanged
establecer la UpdateSourceTrigger=PropertyChanged
en su expresión de enlace, por ejemplo
<TextBox Text="{Binding Path=DatabaseFilter, UpdateSourceTrigger=PropertyChanged}" />
También hay diferentes valores disponibles, como: Explicit
: cuando necesita llamar explícitamente la actualización al enlace; LostFocus
: esto es por defecto para TextBox
, las actualizaciones vinculantes una vez que el control pierde el foco.
Debe recordar que si su acción de filtrado se ejecuta en el subproceso de interfaz de usuario, el filtrado después de cada pulsación de tecla puede no ser lo más inteligente, ya que la experiencia del usuario puede verse gravemente afectada por los retrasos creados por este filtrado. Si está seguro de que necesita filtrar después de cada pulsación de tecla, asegúrese de que el filtrado sea rápido (por ejemplo, hay pocos elementos para filtrar) o de que filtrará en el subproceso de fondo.