我正在尝试获取所有颜色并使用mvvm中的颜色列表填充我的列表框。因为我使用的是下面的代码,但它在下面的代码中给出了错误。请让我知道我错在哪里。
属性
private List<Color> _colorlist;
public List<Color> ColorList
{
get { return _colorlist; }
set
{
_colorlist = value;
RaisePropertyChanged(() => _colorlist);
}
}
List<Color> list = new List<Color>();
Type colorType = typeof(System.Drawing.Color);
if (null != colorType)
{
PropertyInfo[] propInfoList =
colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly
| BindingFlags.Public);
int nNumProps = propInfoList.Length;
for (int i = 0; i < nNumProps; i++)
{
PropertyInfo propInfo = (PropertyInfo)propInfoList[i];
object[] index = null;
list.Add((Color)propInfo.GetValue(null, index)); //Specified cast is not valid.
string strColorName = propInfo.Name;
}
}
答案 0 :(得分:2)
我的代码中至少可以看到两个问题:
RaisePropertyChanged(() => _colorlist)
来引发通知。它应该是RaisePropertyChanged(() => Colorlist)
,因为您绑定到ColorList
,而不是_colorlist
(私有)。这不是造成问题的原因,但这意味着绑定系统不会检测属性值何时发生变化。System.Drawing.Color
获取颜色(这是GDI +颜色类型),并且您将值转换为Color
,我假设它是System.Windows.Media.Color
,即WPF颜色类型。尽管它们具有相同的名称,但它们的类型不同,因此无效的强制转换异常。您应该从System.Windows.Media.Colors
类的属性中获取颜色。