У меня есть поле со списком WPF, привязанное к наблюдаемой коллекции (OC):
<ComboBox Name="cbCombination" ItemsSource="{Binding Combinations}"
SelectedIndex="0" />
В другом месте, в объекте, заданном в качестве контекста данных:
public ObservableCollection<Combination> Combinations { get; set; }
Комбинация переопределяет его ToStringи все великолепно: в раскрывающемся списке со списком отображаются все элементы Комбинации в ОК комбинаций.Поле выбора комбинированного списка отображает значение первой комбинации.
Теперь объект контекста данных должен изменить значения в своих комбинациях. OC:
var combinationsList = CombinationsManager.CombinationsFor(someParam);
this.Combinations.Clear();
foreach (var combination in combinationsList)
this.Combinations.Add(combination);
NotifyPropertyChanged(@"Combinations");
Это вызывает комбинированиеПоле выбора -box показывает пустую строку.(Раскрывающийся список закрыт. Однако, когда я делаю его выпадающим, он показывает правильные новые комбинации, поэтому привязан к обновленной коллекции ).
Я пыталсязахватывать события как SourceUpdated, так и (в моем случае) события TargetUpdated (неважно, как там настроить SelectedIndex), но мои обработчики событий не вызывались!
Поэтому мой вопрос: Как мне сделать WPFComboBox обновляет значение своего поля выбора, когда наблюдаемая коллекция, к которой он привязан, изменяется?
Обновление :
Я совершенно забыл упомянутьи я не знаю, важно ли это, но поле со списком находится внутри UserControl.XAML UserControl выглядит следующим образом:
<UserControl x:Class="...CombinationsToolBar"
.... mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<ToolBarTray Name="toolBarTray1" >
<ToolBar Name="toolBar1">
<ComboBox Name="cbCombination"
ItemsSource="{Binding Path=Combinations, NotifyOnSourceUpdated=True,
IsAsync=True}"
SelectedIndex="0" IsEditable="False"
SelectionChanged="CbCombinationSelectionChanged"
SourceUpdated="CbCombinationSourceUpdated"
TargetUpdated="CbCombinationTargetUpdated"></ComboBox>
</ToolBar>
</ToolBarTray>
В коде UserControl у меня есть точки останова на CbCombinationSelectionChanged, CbCombinationSourceUpdated и CbCombinationTargetUpdated.
CbCombinationSelectionChanged запускается один раз при первой загрузке формы, содержащей пользовательский элемент управления.Он действительно вызывается во второй раз, когда очищается коллекция комбинаций, как сказал @asktomsk.
Обновленный источник и обновленная цель не срабатывают - CbCombinationSourceUpdated и CbCombinationTargetUpdated не вызываются.
Поскольку поле со списком находится внутри пользовательского элемента управления, а коллекция комбинаций находится внутри модели представления, а модель представления не имеет доступа к полю со списком, У меня нет возможности установить выбранноеИндекс комбо, если события не срабатывают .
: (