2010-04-09 3 views
6

Я читал this very related question here on SO, и это было чрезвычайно полезно из-за ссылки в ответе. У меня просто проблема, которая теперь идет на дополнительный шаг и все это работает с шаблоном MVVM.Сопоставление перечисления с ComboBox в WPF + MVVM

Скажем, у меня есть свой ViewModel, и он (или даже модель) может иметь перечисление определено:

public enum MyTypes { Type1, Type2, Type3 }; 

Я хочу, чтобы это привязка в ComboBox в моем GUI. Согласно статье, я бы использовал ObjectDataProvider для вызова метода Enum.GetValues ​​() в MyTypes. Поэтому я должен передавать MyTypes как MethodParameter. Но как вы проходите этот тип? Я пробовал различные методы, такие как добавление ссылки на пространство имен в 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> 

Довольно много я ничего не поставить там даже скомпилировать. Кто-нибудь знает, как пройти мимо этого маленького препятствия?

ответ

4

Простейшее способ добавить эту строку в коде:

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

Другие варианты, чтобы добавить разметки расширения, которые производят список значений из перечисления.

+0

Это может быть простейший, но я не думаю, что это уместно, потому что мой DataContext - это моя ViewModel, вот как я связываю все свои команды и другие комбобокс. У меня есть тонна других элементов графического интерфейса, а не только одно combobox. Что касается «других опций», я думал, что разметка, которую я разместил в моем вопросе, - это то, как вы создаете список значений из перечисления? – Dave

+0

не может быть сделано чистым XAML. и он ищет меня, что с обычным C# это делается намного проще. Создайте свойство в нашей модели ViewModel под названием MyTypesValues ​​и тогда привязайтесь к нему. ({Binding MyTypesValues}). – Andrey

4

Смотрите мой ответ на этот пост SO: How to declare combobox itemTemplate that has Itemsource as Enum Values in WPF?

Короче говоря, в ObjectDataProvider.MethodParameters следует обратиться к имени типа вашего ENUM как ссылка в пространстве имен, то есть,

<ObjectDataProvider.MethodParameters> 
    <x:Type TypeName="my:MyTypes"/> 
</ObjectDataProvider.MethodParameters> 
Смежные вопросы