2010-10-18 5 views
0

Следующий код не вызывает набор свойств SelectedItem в моей модели представления.WPF DataBinding - изменение выделенного объекта ComboBox, не вызывающего ViewModel

<ComboBox x:Name="cmbGuaranteeType" Margin="5,5,5,5" MinWidth="80" 
      ItemsSource="{Binding Source={StaticResource guaranteeTypesKey}}" 
      SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type wpfToolkit:DataGridRow}}, Path=DataContext.GuaranteeType, Mode=TwoWay}" 
     /> 

Вид - это UserControl, связанный с ViewModel. У UserControl есть файл данных WpfToolkit, который привязан к ObservableCollection в ViewModel. ObservableCollection состоит из List<T> элементов. Выше выпадающий является обязательным к свойству «GuaranteeType» на одном из элементов T следующим образом:

public GuaranteeType? GuaranteeType 
{ 
    get { return _guaranteeType; } 
    set { _guaranteeType = value; NotifyPropertyChanged(ConstGuaranteeType); } 
} 

Когда UserControl загружаются, геттер собственности GuaranteeType, называются и SelectedItem установлен правильно. Однако, когда я нажимаю на ComboBox и пытаюсь изменить SelectedItem, установщик для свойства GuarenteeType никогда не вызывается.

Кроме того, я внедрил SelectionChanged="cmbGuaranteeType_SelectionChanged" в XAML против кодового кода View и при загрузке представления метод SelectionChanged вызывается один раз, но не вызывается, когда я освобождаю мышь при попытке изменить выбранный элемент combobox.

ответ

0

Я извиняюсь за такой неопределенный ответ, но я видел, как это произошло раньше, и я, кажется, помню, что это связано с событием щелчка сетки, отвязавшей SelectedItem. Подобные вещи случаются при привязке переключателей.

Для полей со списком, я практически всегда использовать по умолчанию в ListCollectionView выставить основные наблюдаемые коллекции и установите XAML следующим образом:

<ComboBox ItemsSource="{Binding ListCollectionViewPropertyHere}" IsSynchronizedWithCurrentItem="True"/> 

Тогда из кода вы можете захватить ListCollectionViewPropertyHere.CurrentItem если вы опрос или подписаться на событие ListCollectionViewPropertyHere.CurrentItemChanged, если вам необходимо получить уведомление по клику.

+0

Что вы подразумеваете под опросом в этом контексте? Однако я сделал несколько попыток; Я изменил ItemsSource, чтобы указать на ListCollectionView на ViewModel, но безрезультатно. В ViewModel я даже подписался на события CurrentChanging & CurrentChanged, но они запускаются только во время загрузки, а не при изменении. Удивительно то, что в то время как свойство GettyType getter возвращает правильный SelectedItem во время процесса привязки, ComboBox не показывает SelectedItem (как это было ранее). –

Смежные вопросы