Ho un modello di vista che implementa INotifyPropertyChanged
. Su questo viewModel è una proprietà chiamata SubGroupingView
. Questa proprietà è associata all'elemento selezionato di una casella combinata. Quando cambio la casella combinata, la proprietà sorgente viene aggiornata correttamente, ma quando cambio la proprietà sorgente o quando il controllo è inizializzato, combobox.selectedItem
NON sta riflettendo ciò che esiste nella proprietà.
Ecco po 'di codice per iniziare:Combobox SelectedItem non si aggiorna quando cambia la sorgente
<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">
La proprietà genera l'evento PropertyChanged
e l'uscita TraceSource mi mostra che il legame rilevato e trasferito il valore, è solo che la casella combinata non è rifletterla . Qualsiasi idea sarebbe molto gradita!
EDIT:
uscita dalla sorgente traccia è questa:
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)
Qui è il codice per la proprietà source:
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");
}
}
}
Nota: ViewModelBase
implementa INotifyPropertyChange
.
RISPOSTA
ho sovraccaricato le ==,! = Operatori, GetHashCode()
, e Equals(object)
ed ora sta lavorando bene. Grazie per tutto il vostro aiuto!
Per motivi di interesse, prova a impostare ItemsSource prima di SelectedItem nella tua dichiarazione XAML. –
Mi stai seguendo opaco? no luck there – TerrorAustralis
Interessante ... potresti pubblicare uno snippet del tuo ViewModel (in particolare la definizione di SubGroupingView)? – Pwninstein