Tengo un modelo de vista que implementa INotifyPropertyChanged
. En este viewModel es una propiedad llamada SubGroupingView
. Esta propiedad está vinculada al elemento seleccionado de un cuadro combinado. Cuando cambio el cuadro combinado, la propiedad de origen se está actualizando correctamente, pero cuando cambio la propiedad de origen o cuando se inicializa el control, el combobox.selectedItem
NO refleja lo que existe en la propiedad.
Aquí hay un código para que pueda empezar:Combobox SelectedItem no se actualiza cuando la fuente cambia
<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 propiedad genera el evento PropertyChanged
y la salida TraceSource me muestra que la unión detectada y transfiere el valor, es sólo que el cuadro combinado no está reflejarla . ¡Cualquier idea seria muy bienvenida!
EDIT:
salida desde el origen de seguimiento es la siguiente:
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)
Aquí es el código de la propiedad de origen:
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
.
RESPUESTA
que sobrecarga el ==,! = Operadores, GetHashCode()
, y Equals(object)
y ahora se está trabajando muy bien. ¡Gracias por toda tu ayuda!
Fuera de interés, intente configurar el ItemsSource antes del SelectedItem en su declaración XAML allí. –
¿Me estás acosando? no hay suerte allí – TerrorAustralis
Interesante ... ¿podría publicar un fragmento de su ViewModel (específicamente la definición de SubGroupingView)? – Pwninstein