Wpf 如何绑定listbox中的颜色集合(mvvm)

Wpf 如何绑定listbox中的颜色集合(mvvm),wpf,mvvm,colors,Wpf,Mvvm,Colors,我正在尝试获取所有颜色,并用mvvm中的颜色列表填充我的列表框。为此,我使用下面的代码,但它在下面的代码中给出了错误。请让我知道我错在哪里 属性 private List<Color> _colorlist; public List<Color> ColorList { get { return _colorlist; } set { _colorlist = value; RaiseProperty

我正在尝试获取所有颜色,并用mvvm中的颜色列表填充我的列表框。为此,我使用下面的代码,但它在下面的代码中给出了错误。请让我知道我错在哪里

属性

 private List<Color> _colorlist;
 public List<Color> ColorList
 {
     get { return _colorlist; }
     set
     {
         _colorlist = value;
         RaisePropertyChanged(() => _colorlist);
     }
 }
private List\u colorlist;
公共列表颜色列表
{
获取{return\u colorlist;}
设置
{
_颜色列表=值;
RaisePropertyChanged(()=>\u颜色列表);
}
}

List List=新列表();
类型colorType=typeof(System.Drawing.Color);
if(null!=colorType)
{
PropertyInfo[]信息列表=
colorType.GetProperties(BindingFlags.Static | BindingFlags.DeclaredOnly
|(公众),;
int nNumProps=propInfoList.Length;
对于(int i=0;i
我发现您的代码中至少有两个问题:

  • 在属性设置程序中,您使用
    RaisePropertyChanged(()=>\u colorlist)
    来引发通知。它应该是
    RaisePropertyChanged(()=>Colorlist)
    ,因为您绑定的是
    Colorlist
    ,而不是
    \u Colorlist
    (它是私有的)。这不是导致问题的原因,但这意味着绑定系统不会在属性值更改时进行检测
  • 您将从
    System.Drawing.Color
    (这是GDI+颜色类型)获取颜色,并将值强制转换为
    Color
    ,我假定它是
    System.Windows.Media.Color
    ,即WPF颜色类型。即使它们具有相同的名称,但它们不是相同的类型,因此出现无效的强制转换异常。您应该从
    System.Windows.Media.colors
    类的属性中获取颜色

-1表示质量非常差的问题。试着用文字来描述你的问题,不要把你的代码扔给我们。。。它给出了下面的错误代码并不是一个有用的描述。
  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;
       }
   }