0

データグリッドには、2 つの DataGridComboBoxColumns があります。これらの列のいずれかの項目は、他の列で選択されている内容に依存する必要があります。これをモデル化するために使用される基になるコレクションは、これをdictionary<string,List<string>>.実装するにはどうすればよいですか? 列の関連するイベントに接続できないようで、これをサポートするデータバインディングのシナリオが見つかりません..

4

2 に答える 2

0

しばらく前に同じシナリオがあり、次のように修正しました。

  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 にバインドされるオブジェクトです。これは、コードの小さなモックアップです。基本的に、TypeSet が変更されるたびに、Type の新しいリストを表示する必要がありました。静的リストのみを使用しました。この例では、辞書を使用しました。
このセットアップでは、コンボボックスの ItemsSource を「DisplayableComboBoxItems」にバインドし、SelectedValue を「TypeId」にバインドできます。TypeId の代わりに正しいテキストを表示するには、他のプロパティが必要になります。
これの欠点は、1000 個以上のアイテムがある場合、すべてのアイテムに対して同じリストが作成されることです。ただし、これは私には当てはまりませんでした (DataGrid は最大 50 項目を示しました)。

これが十分に明確であり、正しい方向に役立つことを願っています!

乾杯!
ロエル

于 2009-10-13T08:51:29.077 に答える
0

2 番目の列に DataGridComboBoxColumn を使用する代わりに、Combobox が埋め込まれた DataGridTemplateColumn を使用しました。itemsource については、コンバーターを定義しました: string -> List<string>. コンバーターは、他の DataGridComboBox ( にバインドされているNavn)の selecteditem の値を に変換しList<string>ます。これは単なる辞書検索です。

そのようです:

<my:DataGridTemplateColumn>
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox  SelectedItem="{Binding Værdi}" 
                                    ItemsSource="{Binding Navn,  Converter={StaticResource dimensionToValues}}"
                                   > 
                        </ComboBox>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
于 2009-10-14T11:55:25.370 に答える