Ich verwende MVVM, falls es einen Unterschied macht.
Meine MainWindowViewModel hat zwei DependencyProperties, DieListe y TheSelectedItem . DieListe ist eine Liste<Typ> , TheSelectedItem ist eine Typ .
Das MainWindow hat eine ComboBox . Wenn die MainWindowViewModel lädt, wird eine Liste aller Klassen in der Assembly erstellt, die Folgendes implementieren IMyInterface und setzt DieListe dazu.
Jede dieser Klassen hat ein benutzerdefiniertes Attribut, das AnzeigeName die einen Parameter hat, der verwendet wird, um einen benutzerfreundlichen Namen für die Klasse anstelle des Namens, den die Anwendung für die Klasse kennt, anzuzeigen.
Ich habe auch eine Wertkonverter für den ausdrücklichen Zweck, diese Typen in die Anzeigenamen umzuwandeln.
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);
}
}
Am Ende habe ich also eine ComboBox mit einer Liste von Namen, die für den Benutzer verständlich sein sollten. Fantastisch! Das ist genau das, was ich will!
Nächster Schritt: Ich binde die SelectedItem-Eigenschaft meiner ComboBox zu meinem TheSelectedItem Eigenschaft in meinem ViewModel.
Hier ist das Problem: Wenn ich eine Auswahl treffe, erhalte ich einen kleinen roten Kasten um meine ComboBox und die TheSelectedItem Eigenschaft auf meinem ViewModel wird nie festgelegt.
Ich bin mir ziemlich sicher, dass es an einer Fehlanpassung des Typs liegt (die Elemente in der ComboBox scheinen jetzt Strings zu sein, und TheSelectedItem ist vom Typ Typ --auch, wenn ich die TheSelectedItem zu einer cadena anstelle einer Typ es funktioniert). Aber ich weiß nicht, wo ich mit der Codierung beginnen muss, um den (hoffentlich eindeutigen) DisplayName zu konvertieren, der in der ComboBox zurück in ein Type-Objekt ist.
Vielen Dank im Voraus für jede Hilfe. Ich bin ziemlich verblüfft über diese ein.