如何绑定列表框中的颜色集合(mvvm)

时间:2014-07-01 07:39:22

标签: wpf mvvm colors

我正在尝试获取所有颜色并使用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;
       }
   } 

1 个答案:

答案 0 :(得分:2)

我的代码中至少可以看到两个问题:

  • 在属性设置器中,您使用RaisePropertyChanged(() => _colorlist)来引发通知。它应该是RaisePropertyChanged(() => Colorlist),因为您绑定到ColorList,而不是_colorlist(私有)。这不是造成问题的原因,但这意味着绑定系统不会检测属性值何时发生变化。
  • 您从System.Drawing.Color获取颜色(这是GDI +颜色类型),并且您将值转换为Color,我假设它是System.Windows.Media.Color,即WPF颜色类型。尽管它们具有相同的名称,但它们的类型不同,因此无效的强制转换异常。您应该从System.Windows.Media.Colors类的属性中获取颜色。