WPF DataBinding - изменение SelectedItem в ComboBox без вызова ViewModel - PullRequest
0 голосов
/ 18 октября 2010

Следующий код не вызывает установщик свойств SelectedItem в моей модели представления.

<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 для кодовой области представления, и когда представление загружается, метод SelectionChanged вызывается один раз, но он не вызывается, когда я отпускаю мышь при попытке изменить выбранный элементкомбинированный ящик.

1 Ответ

0 голосов
/ 19 октября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...