在以下代码中:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace BindingSourceSimpleTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class Color
{
public string Name { get; set; }
public int Red { get; set; }
public int Green { get; set; }
public int Blue { get; set; }
}
public class Obj
{
public string Name { get; set; }
public string Color { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
var colors = new List<Color>();
colors.Add(new Color { Name = "Black", Red = 0, Green = 0, Blue = 0 });
colors.Add(new Color { Name = "Blue", Red = 0, Green = 0, Blue = 255 });
colors.Add(new Color { Name = "Red", Red = 255, Green = 0, Blue = 0 });
colors.Add(new Color { Name = "Magenta", Red = 255, Green = 0, Blue = 255 });
colors.Add(new Color { Name = "Green", Red = 0, Green = 255, Blue = 0 });
colors.Add(new Color { Name = "Cyan", Red = 0, Green = 255, Blue = 255 });
colors.Add(new Color { Name = "Yellow", Red = 255, Green = 255, Blue = 0 });
colors.Add(new Color { Name = "White", Red = 255, Green = 255, Blue = 255 });
var objs = new List<Obj>();
objs.Add(new Obj { Name = "Sun", Color = "Yellow" });
objs.Add(new Obj { Name = "Grass", Color = "Green" });
objs.Add(new Obj { Name = "Blood", Color = "Red" });
objs.Add(new Obj { Name = "Sky", Color = "Blue" });
objs.Add(new Obj { Name = "Hair", Color = "Black" });
objs.Add(new Obj { Name = "Snow", Color = "White" });
objs.Add(new Obj { Name = "Rose", Color = "Red" });
listBoxObjs.DataSource = new BindingSource(objs, null);
listBoxColors.DataSource = new BindingSource(colors, null);
comboBoxObjColor.DataSource = new BindingSource(colors, null);
textBoxObjName.DataBindings.Add("Text", listBoxObjs.DataSource, "Name");
comboBoxObjColor.DataBindings.Add("SelectedItem", listBoxObjs.DataSource, "Color");
textBoxColorName.DataBindings.Add("Text", listBoxColors.DataSource, "Name");
textBoxColorRed.DataBindings.Add("Text", listBoxColors.DataSource, "Red");
textBoxColorGreen.DataBindings.Add("Text", listBoxColors.DataSource, "Green");
textBoxColorBlue.DataBindings.Add("Text", listBoxColors.DataSource, "Blue");
listBoxObjs.DisplayMember = listBoxColors.DisplayMember = comboBoxObjColor.DisplayMember = "Name";
}
}
}
以及以下表单UI:
Form1 http://hamidi2.persiangig.com/image/910404_BindingSourceSimpleTest_UI.png
感谢
答案 0 :(得分:0)
看起来你在Obj列表中缺少对颜色对象的引用。它的Color属性是字符串,但与Color列表中的Color对象没有任何关系。
public class Obj
{
public string Name { get; set; }
public BindingSourceSimpleTest.Color Color { get; set; }
}
此外,您的类应实现INotifyPropertyChanged接口,以使数据绑定正常工作:
public class Obj : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private string name;
private BindingSourceSimpleTest.Color color;
protected void OnPropertyChanged(string propName) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public string Name {
get { return name; }
set {
name = value;
OnPropertyChanged("Name");
}
}
public BindingSourceSimpleTest.Color Color {
get { return color; }
set {
color = value;
OnPropertyChanged("Color");
}
}
}