Entonces, tengo una tabla de clientes, que contiene registros de clientes, registro, cada uno de los cuales tiene un campo de tipo de campo. También tengo una tabla customertype, que contiene los valores válidos para el campo customertype.WPF/XAML - Permitir que ComboBox tenga SelectedValue que no esté en ItemsSource
Y necesito un WPF para hacer CRUD. (Crear, revisar, actualizar, eliminar).
La solución obvia es utilizar un ComboBox, con su propiedad SelectedValue vinculada al campo customertype, y su propiedad ItemsSource vinculada a una lista poblada por una consulta de la tabla customertype.
El problema es que esto no funciona, excepto en el tipo de problema simple que se ve en los ejercicios.
La dificultad surge cuando está viendo o editando un registro de cliente que tiene un valor de tipo de dominio que no está en la tabla de tipos de elemento. Esto puede suceder por error, o puede suceder porque el tipo de elemento principal se ha desaprobado y eliminado de la tabla.
Lo que hace WPF, en esta circunstancia, es establecer el campo tipo de elemento de comando en nulo, porque SelectedValue no está en la lista ItemsSource. Y eso es un problema
Si solo está viendo, debería ver el valor que está en la tabla, independientemente de si está en la lista. Si está editando, puede hacer un argumento razonable de que también debe mostrar el valor que está en la tabla, al menos inicialmente, aunque si cambia la selección, no puede obtener lo que comenzó.
¿Alguna idea? Este es un problema que ocurre en casi todos los formatos de edición/vista que tengo, por lo que preferiría algo que esté razonablemente limpio en el momento del uso. (Es decir, dada la elección de la complicación en el XAML, cada lugar que necesito para manejar uno de estos campos, o una complicación en el código que respalda el XAML que inserto para manejar uno de estos campos, prefiero este último)
Lo intento y no funciona del todo. El código que se encuentra detrás de ItemsSource del combobox ahora inserta el customerid actual, si no está en lo que se devuelve desde la base de datos, si estamos viendo un registro existente. Pero si cambio para editar un nuevo registro, estoy levantando PropertyChanged en la propiedad ItemsSource, y en el depurador puedo ver el código llamado, y una nueva lista construida que no incluye el valor extra, sino en la UI, Todavía veo la primera lista. –
¿Ha usado trie utilizando ObservableCollection para su ItemsSource o INotifyPropertyChanged cuando cambia su colección de Lista? – Josh
Sólo un poco de confusión mental de mi parte. No estaba criando cambios de propiedad en la propiedad, pensé que era. –