2015-05-16 3 views
0

Я в настоящее время здание приложение, которое содержит структуру, подобную этой:WPF ComboBox для интерфейса типа

public class ViewModel 
{ 
    public string property1 {get;set;} 
    public string property2 {get;set;} 

    public ISomeInterface interfaceProperty {get;set;} 
} 

, который затем несколько различных классов, которые реализуют определенные ISomeInterface.

Есть ли способ представить interfaceProperty как выбивку вариантов, которые позволили бы мне изменить тип, который там хранится, не прибегая к проводке, которая все в коде позади?

Дополнительная морщина, я также хотел бы показать некоторые текстовые файлы с привязкой для настройки различных свойств в выбранном типе, которые будут меняться при изменении типа, возможно ли это?

+1

Reflection позаботится о поле со списком, просто заполните коллекцию на основе результатов. Что касается создания экземпляров через пользовательский интерфейс, вы можете использовать селектор шаблонов данных на основе фактического типа свойства. У меня нет кода, поэтому я предлагаю это как комментарий как возможный указатель. – kidshaw

+0

Вы хотите, чтобы вы выбрали поле со списком, которое позволит вам выбрать, какой экземпляр класса (сформировать все классы, реализующие интерфейс), хранится в свойстве? – ZivS

+0

@ ZivS Да, в значительной степени это точно. Теперь, когда я думаю об этом, я мог бы иметь список классов ISomeInterface, которые он привязал к combobox. – Patrick

ответ

0

Есть ли способ представить интерфейсProperty как выбивку вариантов, которые позволили бы мне изменить тип, который там хранится, не прибегая к проводке, что все в коде позади?

Возможно, в зависимости от того, что вы на самом деле хотите сделать. Если вы просто хотите привязать коллекцию существующих объектов к ComboBox в качестве параметров выбора, это должно работать нормально. Но, очевидно, в этом случае, если вы используете этот интерфейс с несколькими экземплярами вашего типа ViewModel, каждый экземпляр будет иметь тот же объект ISomeInterface для данного типа реализации. Это может быть или не быть приемлемым.

Если вы хотите, чтобы автоматически обнаруживать все доступные реализаций ISomeInterface и заселить ComboBox с самими типами, создавая новый экземпляр для ViewModel каждый раз, когда выбранные изменения реализации, то нет и hellip; что будет требовать код-позади.

Если вам нужны уникальные экземпляры объектов, но все в порядке с указанием опций вручную, вы можете сделать это, например. набор делегатов фабрики или реализация IValueConverter (например, для преобразования значения string или Type из ComboBox в новый экземпляр желаемого типа).

К сожалению, ваш вопрос освещен в требованиях, поэтому трудно понять, что сработает для вас. Есть много вариантов, и перечисление их всех будет «слишком широким» для переполнения стека.

Я также хотел бы показать некоторые текстовые поля данных для настройки различных свойств в выбранном типе, которые будут меняться при изменении типа, возможно ли это?

Несомненно. Просто объявите соответствующие ресурсы для разных типов, которые вы хотите обработать, и используйте ContentPresenter с Content, связанными с экземпляром типа, который вы хотите отобразить.

+0

Привет, Питер, я пошел со связыванием со списком строк (сгенерированным из имен типов), а затем с помощью valueconverter для преобразования этого в пригодный для использования экземпляр соответствующего типа (и обратно) в связанном свойстве. Очень похоже на одно из ваших предложений, поэтому я даю вам галочку. Кроме того, хорошо видно, что делать со второй частью. Спасибо. – Patrick

+0

Счастливые, чтобы помочь. См. [Этот ответ в столбце «DataTemplates in WPF»] (http://stackoverflow.com/a/9133495/) для более подробного объяснения использования «DataTemplate» для вашего сценария. –