琐碎的数据绑定示例就是这样,微不足道。我想做一些更复杂的事情,我想知道是否有一种简单的,内置的方式来处理它。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
List<DataStruct> list = new List<DataStruct>()
{
new DataStruct(){Name = "Name 1", Value = "Value 1", ComplexValue = new ComplexValue(){Part1 = "1:P1", Part2 = "1:P2"}},
new DataStruct(){Name = "Name 2", Value = "Value 2", ComplexValue = new ComplexValue(){Part1 = "2:P1", Part2 = "2:P2"}}
};
listBox1.DataSource = list;
listBox1.DisplayMember = "ComplexValue.Part1";
}
}
public class DataStruct
{
public string Name { get; set; }
public string Value { get; set; }
public ComplexValue ComplexValue { get; set; }
}
public class ComplexValue
{
public string Part1 { get; set; }
public string Part2 { get; set; }
}
是否有一种简单的方法可以将Part1属性的值设置为DataStruct项列表的显示成员?上面我尝试了一些我认为有意义的东西,但它只是默认返回到DataStruct上的ToString()。如果有必要的话,我可以解决它,我只是想知道数据绑定中是否有内容可以处理更复杂的数据绑定,如上所述。
编辑:使用WinForms
答案 0 :(得分:2)
也许不是内置方式,但您可以随时定义
DataStruct {
public ComplexValuePart1 {
get { return ComplexValue.Part1; }
}
}
并将您的DisplayMember设置为
答案 1 :(得分:2)
就个人而言,我会选择像Jimmy这样的简单解决方案 - 但是,如果你希望这样做(使用常规的win-form绑定),你需要使用自定义类型描述符来将Part1
/ Part2
展平为DataStruct
的虚拟属性。您可以通过ICustomTypeDescriptor
或TypeDescriptionProvider
执行此操作。后者更多参与,但从“关注点分离”的观点来看更清洁。
如果你真的想要我可以准备一个例子(或者我过去曾经做过许多浮动) - 但简单就是美丽:如果你只有一些属性,一个简单的外观(即通过属性) DataStruct
)会更好。