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; }
}

DataStructアイテムのリストの表示メンバーとして設定するPart1プロパティの値を取得する簡単な方法はありますか?上記で私は理にかなっていると思った何かを試しましたが、それはデフォルトでDataStructのToString()に戻ります。必要に応じて回避できます。データバインディングに、上記のようなより複雑なデータバインディングを処理するものが組み込まれているのではないかと思っていました。

編集:WinFormsの使用

4

2 に答える 2

2

おそらく組み込みの方法ではありませんが、いつでも定義できます

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

DisplayMemberをそれに設定します

于 2008-10-10T20:03:50.347 に答える
2

個人的には、ジミーのような単純なソリューションを使用しますが、これを (通常の win-form バインディングで) 行いたいPart1場合は、カスタム型記述子を使用して/Part2を仮想プロパティとしてフラット化する必要がありますDataStructICustomTypeDescriptorまたはを介し​​てこれを行うことができますTypeDescriptionProvider。後者はより複雑ですが、「関心の分離」の観点からはよりクリーンです。

本当に必要な場合は、例を準備できます(または、過去に行ったことがたくさんあります)-しかし、シンプルは美しいです:プロパティがいくつかしかない場合、シンプルなファサード(つまり、パススループロパティ on DataStruct)は好ましい。

于 2008-10-10T20:11:04.047 に答える