Combobox SelectedItem не не обновлять при изменении источника

у меня есть модель представления, которая реализует INotifyPropertyChanged . В этом viewModel это свойство называется SubGroupingView . Это свойство привязано к выбранному элементу поля со списком. Когда я изменяю поле со списком, свойство источника корректно обновляется, но когда я изменяю свойство источника или когда инициализируется элемент управления, combobox.selectedItem НЕ отражает то, что существует в свойстве.
Вот некоторый код, с которого можно начать:

<ComboBox Grid.Column="3" Grid.Row="1" 
          Margin="0,1,4,1" 
          SelectedItem="{Binding Path=SubGroupingView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, diag:PresentationTraceSources.TraceLevel=High}" 
          ItemsSource="{Binding Columns}" 
          DisplayMemberPath="DisplayName">

Свойство вызывает событие PropertyChanged , и вывод TraceSource показывает мне, что привязка обнаружила его и передала значение, просто то, что комбинированный список не отражает его , Любые идеи будут приветствоваться!

РЕДАКТИРОВАТЬ:
выходные данные из источника трассировки:

System.Windows.Data Warning: 91 : BindingExpression (hash=23631369): Got PropertyChanged event from ReportViewModel (hash=52844413)  
System.Windows.Data Warning: 97 : BindingExpression (hash=23631369): GetValue at level 0 from ReportViewModel (hash=52844413) using RuntimePropertyInfo(SubGroupingView):         DataColumnViewModel (hash=58231222)  
System.Windows.Data Warning: 76 : BindingExpression (hash=23631369): TransferValue - got raw value DataColumnViewModel (hash=58231222)  
System.Windows.Data Warning: 80 : BindingExpression (hash=23631369): TransferValue - implicit converter produced DataColumnViewModel (hash=58231222)  
System.Windows.Data Warning: 85 : BindingExpression (hash=23631369): TransferValue - using final value DataColumnViewModel (hash=58231222)  

Вот код для свойства источника:

public class ReportViewModel : ViewModelBase, IReportTemplate
{
    public DataColumnViewModel SubGroupingView
    {
        get
        {
            return GetViewModel(_report.SubGrouping);
        }
        set
        {
            if (_report.SubGrouping == value.ColumnName)
                return;
            _report.SubGrouping = value.ColumnName;
            RefreshDataSeries();
            base.OnPropertyChanged("SubGroupingView");
            base.OnPropertyChanged("IsReady");
        }

    }
}

Примечание. ViewModelBase реализует INotifyPropertyChange .

ОТВЕТ
Я перегружен операторы ==,! =, GetHashCode () и Equals (object) , и теперь все работает хорошо. Спасибо за вашу помощь!

8
задан Naser Asadi 15 November 2014 в 13:34
поделиться

2 ответа

Объект, возвращаемый из вашего SubGroupingView, должен быть "равен" одному из объектов в ComboBox.Items (что означает, что он должен быть в вашей коллекции Columns). Поэтому, если вы выполните команду "a.Equals(b)", она должна вернуть true.

Если они функционально одинаковы, но не возвращают true при сравнении, то это ваша проблема. Вам нужно либо вернуть тот же объект, либо переопределить метод Equals (и, возможно, операторы == и !=).

Если это ваша проблема, то это та же проблема, что и в этом вопросе.

16
ответ дан 5 December 2019 в 08:50
поделиться

Возможно, для IsSynchronizedWithCurrentItem в ComboBox установлено значение false ? Вы можете попробовать явно установить IsSynchronizedWithCurrentItem = "True" и посмотреть, поможет ли это.

3
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: