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