#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
класса.