ジェネリックリストにバインドされたC#更新コンボボックス
-
10-07-2019 - |
質問
フォームにコンボボックスがあり、このような文字列の一般的なリストにバインドされています:
private List<string> mAllianceList = new List<string>();
private void FillAllianceList()
{
// Add alliance name to member alliance list
foreach (Village alliance in alliances)
{
mAllianceList.Add(alliance.AllianceName);
}
// Bind alliance combobox to alliance list
this.cboAlliances.DataSource = mAllianceList;
}
ユーザーは、コンボボックスでアイテムを追加または削除できます。
他の場所で、一般的なリストの項目を追加または削除するだけで、コンボボックスの内容が自動的に更新されることを読みました。 Sort()を使用すると同じことが発生します。
しかし、何らかの理由で、私はこの作品を作ることができません。アイテムを追加/削除/ソートすると、コンボボックスのDataSourceプロパティが正しく更新されますが、コンボボックスに表示される内容はDataSourceプロパティの内容ではありません。
間違いなく何かを見逃したか、何か間違ったことをしている。
事前に感謝します!
編集:
選択した回答により、追加と削除の問題は解決しましたが、BindingListオブジェクトを並べ替えることはできません。これは私にとって必要なことです。 BindingListを継承し、並べ替え機能を追加することでカスタムクラスが構築されるソリューションを見つけましたが、私の場合はもっと簡単なソリューションがあるかどうか知りたいです。
これを簡単に解決する方法についての提案はありますか?
解決
これを回避する最も簡単な方法は、次のようにBindingListを使用することです。
private List<string> mAllianceList = new List<string>();
private BindingList<string> bindingList;
private void FillAllianceList()
{
// Add alliance name to member alliance list
foreach (Village alliance in alliances)
{
mAllianceList.Add(alliance.AllianceName);
}
bindingList = new BindingList<string>(mAllianceList);
// Bind alliance combobox to alliance list
this.cboAlliances.DataSource = bindingList;
}
その後、ここから項目を追加および削除するためのバインディングリストを処理します。これにより、リストとComboBoxの両方から削除されます。
編集:並べ替えに関する質問に答えるには、最も簡単な方法(ただし「ハッキング」を行う方法は次のようになります:
mAllianceList.Sort();
bindingList = new BindingList<string>(mAllianceList);
this.cboAlliances.DataSource = bindingList;
したがって、基本的に、ソート後、新しいバインディングリストを作成し、データソースをリセットします。これについてもっとエレガントな方法があるかもしれませんが、これは機能するはずです。