C # / WPF: ListView no se actualiza (pero cuando verifico con Snoop, todo se ve bien)
Pregunta
¿Alguien sabe por qué mi ListView con el siguiente código no funciona? Lo comprobé con Snoop y ItemsSource parece estar bien (y cuando inicio Snoop, ListView me muestra MyViewModel.MyCollection, pero al depurar con Visual Studio no me muestra nada)
¡Gracias!
PS: MainWindow.xaml.cs tiene el DataContext = MainViewModel
<ListView Grid.Row="1" Margin="38,50,0,168" HorizontalAlignment="Left" Name="listViewSelectDate" Width="105"
ItemsSource="{Binding Path=MyViewModel.MyCollection}"
SelectedItem="{Binding SelectedDate}" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=CalcDate}"/>
</GridView>
</ListView.View>
</ListView>
El ViewModel se ve así:
class MainViewModel : ViewModelBase
{
public SummaryViewModel MyViewModel
{
get { return _myViewModel; }
set { _myViewModel = value; RaisePropertyChanged("MyViewModel"); }
}
public MyDate SelectedDate
{
get { return _selectedDate; }
set { _selectedDate = value; RaisePropertyChanged("SelectedDate"); }
}
}
y
public class SummaryViewModel : ViewModelBase
{
public ObservableCollection<MyDate> MyCollection { get; set; }
}
y
public class MyDate
{
public DateTime CalcDate { get; set; }
}
Solución
¿Quién establece MyCollection
? No proporciona notificación de cambio, por lo que el enlace no sabe que se ha cambiado. Cambiar a:
private ObservableCollection<MyDate> _myCollection;
public ObservableCollection<MyDate> MyCollection
{
get { return _myCollection; }
set
{
_myCollection = value;
OnPropertyChanged("MyCollection");
}
}
O, mejor aún, que sea de solo lectura:
private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>();
public ICollection<MyDate> MyCollection
{
get { return _myCollection; }
}
Otros consejos
Mire en la ventana de resultados de Visual Studio, mostrará cualquier error de enlace de datos que pueda estar obteniendo, lo que puede ayudarlo a resolver el problema.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow