wpf toolkit, datagrid, comboboxcolumn

В сетке данных у меня есть две DataGridComboBoxColumns. Элементы одного из этих столбцов должны зависеть от того, что выбрано в другом столбце. Основная коллекция, используемая для моделирования, - это dictionary<string,List<string>>.Как мне реализовать это? Кажется, я не могу подключиться к соответствующим событиям в столбцах и не могу найти сценарии привязки данных, которые поддерживают это.

2 ОТВЕТА

У меня был тот же сценарий некоторое время назад и исправил его так:

  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, мне нужно было отображать новый список типов. Я использовал только статический список, в этом примере я использовал словарь.
С помощью этой настройки вы можете привязать ваш комбинированный список ItemsSource к DisplayableComboBoxItems, а SelectedValue - TypeId. Вам понадобятся другие свойства для отображения правильного текста вместо TypeId.
Недостатком этого является то, что когда у вас есть более 1000 предметов, у вас будет один и тот же список для всех предметов. Это было не так со мной (DataGrid показал максимум 50 элементов).

Надеюсь, это достаточно ясно и поможет вам в правильном направлении!

ура!
Рул

0
13.10.2009 08:51:29
Спасибо за ответ, Роэл, очень помог, но в итоге я занялся другим решением.
fsl 14.10.2009 11:49:14
РЕШЕНИЕ

Вместо того чтобы использовать DataGridComboBoxColumn для второго столбца, я использовал DataGridTemplateColumn со встроенным комбинированным списком. Для ItemSource я определил конвертер: string -> List<string>. Преобразователь переводит значение выбранного элемента другого DataGridComboBox (который связан с Navn) в 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>
0
14.10.2009 11:55:25