非平凡的数据绑定

时间:2008-10-10 19:46:44

标签: c# .net data-binding

琐碎的数据绑定示例就是这样,微不足道。我想做一些更复杂的事情,我想知道是否有一种简单的,内置的方式来处理它。

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

2 个答案:

答案 0 :(得分:2)

也许不是内置方式,但您可以随时定义

DataStruct {
    public ComplexValuePart1 { 
        get { return ComplexValue.Part1; }
    }
}

并将您的DisplayMember设置为

答案 1 :(得分:2)

就个人而言,我会选择像Jimmy这样的简单解决方案 - 但是,如果你希望这样做(使用常规的win-form绑定),你需要使用自定义类型描述符来将Part1 / Part2展平为DataStruct的虚拟属性。您可以通过ICustomTypeDescriptorTypeDescriptionProvider执行此操作。后者更多参与,但从“关注点分离”的观点来看更清洁。

如果你真的想要我可以准备一个例子(或者我过去曾经做过许多浮动) - 但简单就是美丽:如果你只有一些属性,一个简单的外观(即通过属性) DataStruct)会更好。