Я использую MVVM, на случай, если что-то изменится.
My MainWindowViewModel имеет два свойства DependencyProperties, TheList и TheSelectedItem , TheList представляет собой Список , TheSelectedItem представляет собой Тип .
Основное окно имеет ComboBox .Когда MainWindowViewModel загружается, он получает список всех классов в сборке, которые реализуют IMyInterface , и устанавливает TheList на это.
Каждый из этих классов имеет свой собственный атрибут под названием DisplayName , который имеет один параметр, который будет использоваться для отображения понятного имени для класса вместо имени, которое знает приложениео классе.
У меня также есть ValueConverter для явной цели преобразования этих типов в отображаемые имена.
public class TypeToDisplayName : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType.Name == "IEnumerable")
{
List<string> returnList = new List<string>();
if (value is List<Type>)
{
foreach (Type t in value as List<Type>)
{
returnList.Add(ReflectionHelper.GetDisplayName(t));
}
}
return returnList;
}
else
{
throw new NotSupportedException();
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return typeof(BasicTemplate);
}
}
Итак, что яЗавершить это - ComboBox со списком имен в нем, который должен уметь понимать пользователь.Потрясающие!Это именно то, что я хочу!
Следующий шаг: я связываю свойство SelectedItem моего ComboBox со своим TheSelectedItem в моей ViewModel.
Вот проблема: Когда я делаюПри выделении я получаю маленькую красную рамку вокруг моего ComboBox, и свойство TheSelectedItem в моей ViewModel никогда не устанавливается.
Я почти уверен, что это из-за несоответствия типов (элементы в ComboBox теперь выглядят как строки, и TheSelectedItem имеет тип Тип - также, когда я изменяю TheSelectedItem на строку вместо Type , это работает).Но я не знаю, где мне нужно начинать кодирование для преобразования (надеюсь уникального) DisplayName, которое находится в ComboBox, обратно в объект Type.
Заранее благодарен за любую помощь.Я довольно озадачен этим.