У меня есть модель представления, которая реализует 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)
и теперь этоработает хорошо.Спасибо за вашу помощь!