今日は次のような問題がありましたが、解決策はないかと思いました。
私のアイデアは、匿名クラスを作成し、それをWinFormBindingSourceのデータソースとして使用することでした。
public void Init()
{
var option1 = new
{
Id = TemplateAction.Update,
Option = "Update the Templates",
Description = "Bla bla 1."
};
var option2 = new
{
Id = TemplateAction.Download,
Option = "Download the Templates",
Description = "Bla bla 2."
};
var list = new[] {option1, option2}.ToList();
bsOptions.DataSource = list; // my BindingSource
// cboTemplates is a ComboBox
cboTemplates.DataSource = bsOptions;
cboTemplates.ValueMember = "Id";
cboTemplates.DisplayMember = "Option";
lblInfoTemplates.DataBindings.Add("Text", bsOptions, "Description");
}
これまでのところ問題なく動作します。
私が抱えていた問題は、BindingSourceの「Current」プロパティからIdを取得することでした。これは、匿名タイプにIDをキャストして戻すことができないためです。
private void cmdOK_Click(object sender, EventArgs e)
{
var option = (???)bsOptions.Current;
}
「Current」のタイプを見つけて「Id」プロパティにアクセスする方法はないと思いますか?多分誰かが良い解決策を持っています...
Idを取得する他の(そしてより良い)方法があることを私は知っています(反射、ComboBoxから値を読み取る、匿名のtpyeを使用しない、...)bsOptionsからTypeを取得できるかどうかだけ興味があります。エレガントな方法で現在。