2010-04-09 12 views
6

He leído this very related question here on SO, y fue extremadamente útil debido al enlace en la respuesta. Solo estoy teniendo un problema ahora, dando el paso extra y haciendo que todo funcione con el patrón MVVM.Encuadernación de una enumeración a un ComboBox en WPF + MVVM

Digamos que tengo a mi modelo de vista, y él (o incluso el modelo) podría tener una enumeración define:

public enum MyTypes { Type1, Type2, Type3 }; 

Quiero DataBind a un cuadro combinado en mi interfaz gráfica de usuario. De acuerdo con el artículo, usaría un ObjectDataProvider para invocar el método Enum.GetValues ​​() en MyTypes. Así que tengo que pasar MyTypes como MethodParameter. ¿Pero cómo pasas el tipo? He intentado varios métodos, como la adición de la referencia al espacio de nombres en XAML:

<Window.Resources> 
     <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="TipHandlingValues"> 
      <ObjectDataProvider.MethodParameters> 
       <!-- what goes here? it's totally wrong. --> 
       <my:MyTypes /> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
    </Window.Resources> 

Casi nada de lo que puso en su lugar, incluso compilar. ¿Alguien sabe cómo superar este pequeño obstáculo?

Respuesta

4

forma más sencilla es añadir esta línea de código:

DataContext = Enum.GetValues(typeof(MyTypes)); 

Otras opciones es añadir la extensión de marcas que producen lista de valores de enumeración.

+0

que podría ser el lo más simple, pero no creo que sea apropiado porque mi DataContext es mi ViewModel, que es como yo vinculo todos mis comandos y otros comboboxes. Tengo una tonelada de otros elementos de la GUI además del solo cuadro combinado. En cuanto a las "otras opciones", pensé que el marcado que publiqué en mi pregunta es cómo se produce la lista de valores de la enumeración. – Dave

+0

puede que no haya forma de hacerlo por XAML puro. y me parece que se hace mucho más fácil con C# regular. Crea una propiedad en nuestro ViewModel llamada MyTypesValues ​​y únete a in en ese momento. ({Binding MyTypesValues}). – Andrey

Cuestiones relacionadas