tutorial template español data c# .net wpf data-binding mvvm

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 )



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.