Я пытаюсь использовать DataGridComboBoxColumn, но у меня возникают проблемы с отображением текста, связанного с выбранным элементом. Технически я использую MaterialDataGridComboBoxColumn, который расширяет DataGridComboBoxColumn (см. Этот код здесь. Единственное реальное отличие, по-видимому, заключается в добавлении ItemSourceBinding, который облегчает привязку к нестатическому списку.)
Вот ComboBox в xaml:
<materialDesign:MaterialDataGridComboBoxColumn
Header="Meter"
ElementStyle="{StaticResource CenterEverything}"
ItemsSourceBinding="{Binding PotentialMeters}"
DisplayMemberPath="Name"
TextBinding="{Binding Segment.Meter.Name, Mode=OneWay}"
SelectedItemBinding="{Binding Segment.Meter, UpdateSourceTrigger=PropertyChanged}" />
Источник элемента для DataGrid состоит из коллекции ObservableCollection, состоящей из SegmentWrappers:
public sealed class SegmentWrapper : INotifyPropertyChanged {
public Segment Segment { get; set; }
public List<Meter> PotentialMeters => GetPotentialMeters();
public event PropertyChangedEventHandler PropertyChanged;
private List<Meter> GetPotentialMeters() => Segment.Station.AllMeters;
}
Объект Segment - это моя фактическая модель:
public sealed class Segment : INotifyPropertyChanged {
public Station Station { get; set; }
public Meter Meter { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
Теперь, странная вещь, я могу заставить это работать иногда, когда я работаю в отладке. Обычно при запуске я не вижу имя выбранного измерителя в ComboBox, но если я удалю и повторно добавлю атрибут TextBinding из xaml выше, во время выполнения кода, имя будет отображаться правильно! Я думаю, это как-то связано с UpdateSourceTrigger, но я не могу понять это. Есть идеи?