Некоторое время назад у меня был тот же сценарий, и я исправил его так:
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 элементов).
Надеюсь, это достаточно ясно и поможет вам в правильном направлении!
ура!
Рул