Странное поведение для свойства, связанного с SelectedItem WPF Combobox - PullRequest
1 голос
/ 08 июля 2010

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

Должен ли Combobox вызывать установщик свойства привязанного SelectedItem при изменении выбора?

Добавление : У меня фактически есть привязка частично: свойствоgetter вызывается, а setter свойства вызывается один раз, когда выпадающий список впервые загружается / выбирается и никогда не вызывается при последующих изменениях выбора.

Одна вещь, которую я заметил, это то, что, когда я помещаю IsSynchronizedWithCurrentItem = True в запись в выпадающем спискев Xaml сеттер вызывается один раз при загрузке в комбинированный список / первоначальный выбор, но никогда больше.Когда я удаляю этот атрибут со списком, сеттер никогда не вызывается .Очень странно.

Кроме того, я имею в виду свойство модели представления, а не свойство зависимости.По крайней мере, я не настроил его как свойство зависимости.Я новичок в этом (Сюрприз!), Так что любые дополнительные кусочки информации по этому предмету будут наиболее цениться.

xaml Код:

<ComboBox MinWidth="300" Margin="5,0,0,5"
   ItemsSource="{Binding KeywordCollectionTypes, Mode=OneWay}"
   SelectedItem="{Binding KeywordCollectionType, Mode=TwoWay}"
   IsSynchronizedWithCurrentItem="True"/>

Код ViewModel (Связанные атрибуты):

 public Collection<string> KeywordCollectionTypes
    {
        get
        {
            return _KeywordCollectionTypes;
        }
    }

public string KeywordCollectionType
    {
        get
        {
            return _KeywordCollectionType;
        }
        set
        {
            _KeywordCollectionType = value;

            OnPropertyChanged("KeywordCollectionType");
        }
    }

Еще один бит информации состоит в том, что поле со списком находится в пределах DataGrid.RowDetailsTemplate, так может ли это странное поведение обновления быть связано с тем, что он находится в деталях строки?

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

Я наконец-то понял проблему, с которой столкнулся. в операторе привязки к SelectedItem комбинированного списка мне нужно было указать: "UpdateSourceTrigger = PropertyChanged"

Как это:

<ComboBox MinWidth="300" Margin="5,0,0,5"
                                      ItemsSource="{Binding KeywordCollectionTypes, Mode=OneWay}"
                                      SelectedItem="{Binding KeywordCollectionType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

Вот нить, которая привела меня к исправлению:

Проблема с привязкой данных (с использованием шаблона MVVM) к комбинированному списку WPF в RowDetailsTemplate объекта DataGrid

1 голос
/ 08 июля 2010

Вы делаете что-то не так.Из моего текущего проекта:

<ComboBox
   ItemsSource="{Binding Configurations}" 
   SelectedItem="{Binding SelectedConfiguration, Mode=TwoWay}"/>

Установщик свойств SelectedConfiguration вызывается при каждом изменении выбранного элемента.

Редактировать

Я предполагаю, что ваш объект не является DependencyObject, и что свойство, к которому вы привязываете, не является свойством зависимости.Если это свойство зависимости, то, как отмечает DK, привязка обновит значение свойства, вызвав SetValue и обойдя метод доступа к свойству CLR;если вы хотите вставить логику в этот поток управления, обратитесь к методу обратного вызова при регистрации свойства зависимости.

0 голосов
/ 08 июля 2010

это то, как вы привязываете выбранный элемент комбинированного списка к вашей модели данных ....

 <ComboBox SelectedItem="{Binding Path=MyValue}"/>

где MyValue - это свойство вашего DataContext / Data Model.

, если вы хотитеЧтобы привязать другой элемент управления, например TextBlock, к выбранному элементу, вот небольшой пример ...

<ComboBox Name="myComboBox" SelectedIndex="0">
   <ComboBoxItem>1</ComboBoxItem>
   <ComboBoxItem>2</ComboBoxItem>
   <ComboBoxItem>3</ComboBoxItem>
</ComboBox>
<TextBlock Text="{Binding ElementName=myComboBox, Path=SelectedItem.Content}"/>

здесь текстовый блок будет обновляться всякий раз, когда изменяется выбор ComboBox.

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