【问题标题】:How to bind collection of colors in listbox (mvvm)如何绑定列表框中的颜色集合(mvvm)
【发布时间】:2014-07-01 07:39:22
【问题描述】:

我正在尝试获取所有颜色并用 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 用于提出质量很差的问题。尝试用文字来描述你的问题,不要只是把你的代码扔给我们...它在下面的代码中给出错误不是有用的描述。

标签: wpf mvvm colors


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-12-17
    • 2014-07-30
    • 2017-02-02
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多