C#/WPF: ListView não atualizando (mas quando eu verifico com Snoop, tudo parece bem)
Pergunta
Alguém sabe por que meu ListView com o seguinte código não está funcionando? Eu verifiquei com Snoop e o Itens Source parece estar bem (e quando eu começo Snoop, o ListView me exibe o myViewModel.mycollection, mas ao depurar com o Visual Studio não me mostra nada?)
Obrigada!
PS: mainwindow.xaml.cs tem o 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>
O ViewModel se parece com o seguinte:
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"); }
}
}
e
public class SummaryViewModel : ViewModelBase
{
public ObservableCollection<MyDate> MyCollection { get; set; }
}
e
public class MyDate
{
public DateTime CalcDate { get; set; }
}
Solução
Quem define MyCollection
? Não está fornecendo notificação de mudança, portanto, a ligação não sabe que foi alterada. Mudar para:
private ObservableCollection<MyDate> _myCollection;
public ObservableCollection<MyDate> MyCollection
{
get { return _myCollection; }
set
{
_myCollection = value;
OnPropertyChanged("MyCollection");
}
}
Ou, melhor ainda, torne-o somente leitura:
private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>();
public ICollection<MyDate> MyCollection
{
get { return _myCollection; }
}
Outras dicas
Procure na janela de saída do Visual Studio, ele mostrará todos os erros de banco de dados que você pode estar obtendo, o que pode ajudá -lo a resolver o problema.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow