C# 如何将数据源绑定到不同类型的属性?
在以下代码中:C# 如何将数据源绑定到不同类型的属性?,c#,winforms,C#,Winforms,在以下代码中: using System; using System.Collections.Generic; using System.Windows.Forms; namespace BindingSourceSimpleTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
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";
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间绑定SourceSimpleTest
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
公共类颜色
{
公共字符串名称{get;set;}
公共整数Red{get;set;}
公共整数绿色{get;set;}
公共整数蓝色{get;set;}
}
公共类Obj
{
公共字符串名称{get;set;}
公共字符串颜色{get;set;}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
var colors=新列表();
添加(新颜色{Name=“Black”,红色=0,绿色=0,蓝色=0});
添加(新颜色{Name=“Blue”,红色=0,绿色=0,蓝色=255});
添加(新颜色{Name=“Red”,红色=255,绿色=0,蓝色=0});
添加(新颜色{Name=“洋红色”,红色=255,绿色=0,蓝色=255});
添加(新颜色{Name=“Green”,红色=0,绿色=255,蓝色=0});
添加(新颜色{Name=“Cyan”,红色=0,绿色=255,蓝色=255});
添加(新颜色{Name=“Yellow”,红色=255,绿色=255,蓝色=0});
添加(新颜色{Name=“白色”,红色=255,绿色=255,蓝色=255});
var objs=新列表();
添加(新的Obj{Name=“Sun”,Color=“Yellow”});
添加(新的Obj{Name=“Grass”,Color=“Green”});
添加(新的Obj{Name=“Blood”,Color=“Red”});
添加(新的Obj{Name=“Sky”,Color=“Blue”});
添加(新的Obj{Name=“Hair”,Color=“Black”});
添加(新的Obj{Name=“Snow”,Color=“White”});
添加(新的Obj{Name=“Rose”,Color=“Red”});
listBoxObjs.DataSource=newbindingsource(objs,null);
listBoxColors.DataSource=新的BindingSource(颜色,null);
comboBoxObjColor.DataSource=新的BindingSource(颜色,null);
textboxjname.DataBindings.Add(“Text”,listBoxObjs.DataSource,“Name”);
添加(“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:
(来源:)
谢谢您的Obj列表中似乎缺少对颜色对象的引用。它的颜色属性为字符串,但与颜色列表中的颜色对象没有关系
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");
}
}
}