Как привязать коллекцию цветов в listbox (mvvm)

#wpf #mvvm #colors

#wpf #mvvm #Цвет

Вопрос:

я пытаюсь получить все цвета и заполнить свой listbox списком цветов в 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. -1 за представление вопроса очень низкого качества. Попробуйте использовать слова для описания вашей проблемы, не просто бросайте нам свой код… это выдает ошибку в приведенном ниже коде, это не является полезным описанием.

Ответ №1:

Я вижу как минимум две проблемы в вашем коде:

  • В параметре настройки свойств, который вы используете RaisePropertyChanged(() => _colorlist) для вызова уведомления. Это должно быть RaisePropertyChanged(() => Colorlist) , потому что вы привязываетесь к ColorList , а не к _colorlist (который является частным). Проблема не в этом, но это означает, что система привязки не обнаружит, когда изменится значение свойства.
  • вы получаете цвета из System.Drawing.Color (который является типом цвета GDI ), и вы приводите значения к Color , которые, как я предполагаю, являются System.Windows.Media.Color , то есть типом цвета WPF. Несмотря на то, что они имеют одинаковое имя, они разного типа, отсюда и недопустимое исключение приведения. Вместо этого вы должны получить цвета из свойств System.Windows.Media.Colors класса.