2009-09-04 24 views
6

Quiero tener un elemento vacío en el comboBox para permitir al usuario "Deseleccionar" y mantener el comboBox vacío (Valor nulo).WPF: ComboBox anulable

¿Cómo puedo hacer eso?

+0

Lea mi blog para obtener un ejemplo totalmente funcional de un cuadro combinado que se puede anular y limpiar, consulte http://www.blueedge.nl/weblog/post/Nullable-ComboBox-in-Silverlight.aspx. La solución admite enlace de datos bidireccional con nullable artículos. –

Respuesta

3

Haga su vida más fácil usando un valor centinela. Es decir, una instancia de su clase de modelo de vista que no representa nada.

+0

No es exactamente lo que estoy buscando. Quiero que el elemento seleccionado sea 'Nulo', no una instancia como cualquier otro elemento del cuadro combinado. – Yannic

0

Si echa un vistazo a la entrada de mi blog here, puede ver una solución vinculante que no requiere que "modifique" su máquina virtual o que agregue elementos falsos a una colección que realmente no se ajusta a sus datos .

Básicamente, utiliza CompositeCollection en su XAML, que le da la capacidad (por ejemplo) de tener valores numéricos en su cuadro combinado, y el texto "Seleccione ..." para designar el marcador de posición, que no puede hacer si está vinculando por completo a los campos numéricos en su modelo y confiando en eso para agregar este valor mágico.

+2

Creo que tengo que estar en desacuerdo con Pete, y no solo porque me llamaste un "desarrollador profesional";) Esto es mucho más trabajo que usar simples centinelas, y mucho de eso contamina la vista. No me malinterpreten, creo que es ciertamente una opción válida. Pero supongo que prefiero la simplicidad de los centinelas. Además, dado que una máquina virtual es un modelo de la vista, si la vista necesita algo que no represente nada, no creo que esté fuera de lugar que se manifieste en la máquina virtual. Mi 2p. –

+0

Supongamos que tiene una lista de países, ¿su 'centinela' debe ser un país sin descripción? Entonces estás contaminando la base de datos. Tal vez no entiendo algo. – Yannic

+1

Si está usando la máquina virtual para vincularse, entonces no necesita poner los datos en la base de datos, solo tiene que agregarla antes de configurar el DataContext. Si bien entiendo el punto de vista de Kent aquí, tengo que estar en desacuerdo con él porque esto limita al centinela a ser compatible con el tipo de datos de los datos a los que se está vinculando. Supongamos (como dije anteriormente) que desea mostrar una lista de enteros que el usuario puede seleccionar, pero desea mostrar "Seleccione ..." para notificar al usuario que se requiere una selección, debe cambiar la Ints a cadenas. –