WPFのツールキット、データグリッド、comboboxcolumn
-
21-09-2019 - |
質問
データグリッドでは、私は2 DataGridComboBoxColumnsを持っています。これらの列の1の項目は、他の列で選択されているものに依存する必要があります。これをモデル化するために使用される、基礎となるコレクションは、どのように私はこれを実装について行けばdictionary<string,List<string>>.
のですか?私は、列上の任意の関連イベントにフックすることができないよう、私はこれをサポートする任意のデータバインディングシナリオを見つけるカント..
解決 2
の代わりに第二列のDataGridComboBoxColumnを使用する、私は、埋め込まれたコンボボックスとDataGridTemplateColumnと一緒に行きました。 string -> List<string>
:itemsourceのために私は、コンバータを定義しました。変換器は、これは単に辞書引きで、Navn
に(List<string>
に結合している)他のDataGridComboBoxのSelectedItemの値を変換します。
これと同様ます:
<my:DataGridTemplateColumn>
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Værdi}"
ItemsSource="{Binding Navn, Converter={StaticResource dimensionToValues}}"
>
</ComboBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
他のヒント
私はしばらく前に同じシナリオを持っていたし、このようにそれを修正します:
public class DataItem : INotifyPropertyChanged {
...
public List<SomeObject> DisplayableComboBoxItems {
get; set;
}
private static Dictionary<int, List<SomeObject>> myDict;
public Dictionary<int, List<SomeObject>> MyDict {
get {
if (myDict == null) {
myDict = GetYourDataFromSomewhere();
}
return myDict;
}
}
public int TypeId {
get { return typeId; }
set {
if (value == typeId) return;
typeId = value;
RaisePropertyChanged("TypeId");
}
}
public int TypeSetId {
get { return typeSetId; }
set {
if (typeSetId == value) return;
typeSetId = value;
RaisePropertyChanged("TypeSetId");
DisplayableComboBoxItems = MyDict[typeSetId];
RaisePropertyChanged("DisplayableComboBoxItems");
TypeId = 0;
}
}
...
}
のDataItemはのDataRowにバインドされますオブジェクトです。
これは、コードのほんのモックアップです。タイプセットの変更は、私はタイプの新しいリストを必要に応じていつでも基本的には、表示されます。私は、この例では、私は辞書を使用し、単に静的リストを使用していました。
この設定で、あなたは「DisplayableComboBoxItems」、および「型ID」へのごSelectedValueのにのItemsSourceをコンボボックスに結合することができます。
あなたはつもりだ代わり型IDの正しいテキストを表示するために、他のプロパティを必要としています。
これの欠点は、あなたが1000個の+のアイテムを持っているとき、あなたはすべての項目の同じリストを持っているだろうということです。これは、(データグリッドは、最大50の項目を示した)。
私は、これは十分に明確であり、それは正しい方向にあなたを助けますことを願っています!
歓声!
ロエル