2010-10-26 18 views
5

Hola a todos
Tengo un cuadro combinado que está vinculado a una lista de elementos. Pero además de esa lista de elementos, quiero tener otro artículo. Este elemento debería mostrar el texto 'Nuevo ...'
La idea es que si seleccionan uno de los elementos normales, realiza alguna acción que involucre ese elemento. Si seleccionan el elemento 'Nuevo', los llevará a una pantalla donde pueden crear un nuevo elemento.
El problema es que cuando se databind algo que no te dan la opción de añadir otro elemento a la misma, y ​​no hay ninguna cuestión de añadir un elemento ficticio a la lista de elementos ...ComboBox de WPF de datos con 'Nuevo ...' elemento

¿Es esta una oportunidad para crear un nuevo control basado en el ComboBox que tiene una propiedad 'DefaultElement'? (con todas las plantillas asociadas y enlace de comandos, etc.)

Respuesta

5

Para hacer esto, he creado previamente una clase de contenedor ficticio para el tipo normal, permitiéndole enlazar a una lista que contiene principalmente los valores correctos y también su "Nuevo". .. "uno, por ejemplo

public class DisplayClass 
{ 
    public DisplayClass(ModelClass mc) 
    { 
     this.mc = mc; 
    } 

    public string Name 
    { 
     get { return this.mc != null ? this.mc.Name : "New..."; } 
    } 

    public bool IsDummy 
    { 
     return this.mc == null; 
    } 

    public ModelClass Model 
    { 
     return this.mc; 
    } 
} 

continuación, puede alojar una colección de estos en su contexto de datos (modelo de vista), y manejar apropiadamente la selección basado en IsDummy. No es tan automático como un control con esta funcionalidad incorporada, pero es bastante simple y probablemente podría ser genérico y reutilizable.

+0

Esto parece cumplir mis criterios ... Su difícil, ya que la suya y respuestas de VC son esencialmente los mismos, pero voy a tomar esto una vez ya que tiene un ejemplo – TerrorAustralis

+0

No se preocupe, me alegra ver que encontró una respuesta –

2

Tenga en cuenta que a lo que se une es a una colección de elementos orientada a la interfaz de usuario que puede ser diferente de las entidades comerciales o de datos.

Si yo fuera usted, insertaría una entidad 'nueva' en la primera posición de la colección encuadernada y la detectaría en mi modelo de vista para desencadenar la acción apropiada cuando el usuario la selecciona.

3

Establezca la propiedad ItemsSource en una CompositeCollection con el nuevo elemento y la colección enlazada, luego detecte la selección de ese elemento según el índice seleccionado o algo similar.

Código Ejemplo:

<ComboBox> 
    <ComboBox.ItemsSource> 
     <CompositeCollection> 
     <ComboBoxItem>Add New Item...</ComboBoxItem> 
     <CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 
</ComboBox> 

MSDN para CompositeCollection: http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

+0

Gran respuesta. Gracias. –

Cuestiones relacionadas