我正在使用 MVVM,以防万一。
我的MainWindowViewModel有两个 DependencyProperties,TheList和TheSelectedItem。TheList是List<Type>,TheSelectedItem是Type。
MainWindow 有一个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,其中包含用户应该能够理解的名称列表。惊人的!这正是我想要的!
下一步:我将ComboBox的 SelectedItem 属性绑定到ViewModel 中的TheSelectedItem属性。
这就是问题所在:当我进行选择时,我的 ComboBox 周围出现了一个小红框,并且我的 ViewModel 上的TheSelectedItem属性永远不会被设置。
我很确定这是因为类型不匹配( ComboBox 中的项目现在似乎是字符串,并且TheSelectedItem的类型是Type ——而且,当我将TheSelectedItem更改为string而不是Type时,它可以工作)。但我不知道我需要从哪里开始编码以将 ComboBox 中的(希望是唯一的)DisplayName 转换回 Type 对象。
提前感谢您的帮助。我对这个很困惑。