2009-08-04 12 views
0

Est-ce que quelqu'un sait pourquoi mon ListView avec le code suivant ne fonctionne pas? J'ai vérifié avec Snoop et le ItemsSource semble être bien (et quand je commence Snoop, le ListView m'indique le MyViewModel.MyCollection, mais quand déboguer avec Visual Studio il ne me montre rien?)C#/WPF: ListView ne pas mettre à jour (mais quand je vérifie avec Snoop, tout semble bien)

Merci!

PS: MainWindow.xaml.cs a 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> 

Le ViewModel ressemble à ceci:

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"); } 
    } 
} 

et

public class SummaryViewModel : ViewModelBase 
{ 
    public ObservableCollection<MyDate> MyCollection { get; set; } 
} 

et

public class MyDate 
{ 
    public DateTime CalcDate { get; set; } 
} 

Répondre

1

Qui définit MyCollection? Il ne fournit pas de notification de modification, de sorte que la liaison ne sait pas qu'elle a été modifiée. Changement à:

private ObservableCollection<MyDate> _myCollection; 
public ObservableCollection<MyDate> MyCollection 
{ 
    get { return _myCollection; } 
    set 
    { 
     _myCollection = value; 
     OnPropertyChanged("MyCollection"); 
    } 
} 

Ou, mieux encore, faire en lecture seule:

private readonly ICollection<MyDate> _myCollection = new ObservableCollection<MyDate>(); 

public ICollection<MyDate> MyCollection 
{ 
    get { return _myCollection; } 
} 
+0

En fait, je pensais que ObservableCollection n'avait pas besoin de OnPropertyChanged (dans mon cas, RaisePropertyChanged), car il implémente déjà INotifyPropertyChanged (http://msdn.microsoft.com/de-de/library/ms668604.aspx). De toute façon, j'ai essayé ça aussi et ça ne semble pas fonctionner .. –

+0

Mon erreur, tu avais raison! Merci beaucoup –

0

Regardez dans la fenêtre de sortie de Visual Studio, il affiche des erreurs de liaison de données que vous pourriez recevoir ce qui peut aider vous résolvez le problème.

+0

Quelle fenêtre voulez-vous dire? :-) Je ne savais pas que Visual Studio peut afficher WPF DataBindings –

+0

La fenêtre Sortie. –