¿Cómo cancelo una selección de usuario en un WPF ListBox con conexión de datos? La propiedad de origen está configurada correctamente, pero la selección de ListBox no está sincronizada.WPF: ¿Cancelar una selección de usuario en un ListBox de datos?
Tengo una aplicación MVVM que necesita cancelar una selección de usuario en un ListBox de WPF si fallan ciertas condiciones de validación. La validación se desencadena por una selección en el ListBox, en lugar de por un botón Enviar.
La propiedad ListBox.SelectedItem
está vinculada a una propiedad ViewModel.CurrentDocument
. Si la validación falla, el colocador para la propiedad del modelo de vista sale sin cambiar la propiedad. Por lo tanto, la propiedad a la que se enlaza ListBox.SelectedItem
no se modifica.
Si eso ocurre, el creador de propiedad del modelo de vista activa el evento PropertyChanged antes de que salga, lo que asumí que sería suficiente para restablecer el ListBox de nuevo a la selección anterior. Pero eso no está funcionando: el ListBox todavía muestra la nueva selección de usuario. Necesito anular esa selección y volver a sincronizarla con la propiedad de origen.
Por si acaso no está claro, aquí hay un ejemplo: ListBox tiene dos elementos, Document1 y Document2; Documento1 está seleccionado. El usuario selecciona Document2, pero Document1 no puede validar. La propiedad ViewModel.CurrentDocument
aún está configurada en Documento1, pero el ListBox muestra que está seleccionado Documento2. Necesito regresar la selección de ListBox a Document1.
Aquí está mi ListBox Encuadernación:
<ListBox
ItemsSource="{Binding Path=SearchResults, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=CurrentDocument, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
lo hice tratar de usar una devolución de llamada desde el modelo de vista (como un evento) a la vista (que se suscribe al evento), para obligar a la propiedad SelectedItem de nuevo a la vieja selección. Paso el documento anterior con el evento, y es el correcto (la selección anterior), pero la selección de ListBox no cambia.
Entonces, ¿cómo hago para que la selección de ListBox vuelva a sincronizarse con la propiedad de modelo de vista a la que está vinculada su propiedad SelectedItem
? Gracias por tu ayuda.
¿La colección 'SearchResults' cambia en algún momento después de que se crea el control? Creo que puede haber un problema con la colección que ItemsSource está obligado a cambiar en cualquier momento o cuando el objeto SelectedItem proviene de una colección diferente. –
Esto es un duplicado de http://stackoverflow.com/questions/2608071/wpf-cancel-a-user-selection-in-a-databound-listbox que tiene más respuestas, incluida la que se vincula a http: // blog .alner.net/archive/2010/04/25/canceling-selection-change-in-a-bound-wpf-combo-box.aspx – splintor