Wpf 如何绑定listbox中的颜色集合(mvvm)
我正在尝试获取所有颜色,并用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
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
- 您将从
(这是GDI+颜色类型)获取颜色,并将值强制转换为System.Drawing.Color
,我假定它是Color
,即WPF颜色类型。即使它们具有相同的名称,但它们不是相同的类型,因此出现无效的强制转换异常。您应该从System.Windows.Media.Color
类的属性中获取颜色System.Windows.Media.colors
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;
}
}