0

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

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

4

2 回答 2

2

也许不是一种内置的方式,但你总是可以定义

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

并将您的 DisplayMember 设置为

于 2008-10-10T20:03:50.347 回答
2

就我个人而言,我会选择像 Jimmy's 这样的简单解决方案——但是,如果你这样做(使用常规的 win-form 绑定),你需要使用自定义类型描述符将Part1/展平Part2DataStruct. 您可以通过ICustomTypeDescriptor或执行此操作TypeDescriptionProvider。后者涉及更多,但从“关注点分离”的角度来看更清晰。

如果你真的想要我可以准备一个例子(或者我过去做过很多)——但简单就是美丽:如果你只有几个属性,一个简单的外观(即通过属性DataStruct)会更可取。

于 2008-10-10T20:11:04.047 回答