C # / WPF: ListView ne met pas à jour (mais quand je vérifie avec Snoop, tout va bien)

StackOverflow https://stackoverflow.com/questions/1228058

  •  22-07-2019
  •  | 
  •  

Question

Quelqu'un sait-il pourquoi mon ListView avec le code suivant ne fonctionne pas? J'ai vérifié avec Snoop et ItemsSource semble bien fonctionner (et lorsque je lance Snoop, ListView m'affiche le MyViewModel.MyCollection, mais lors du débogage avec Visual Studio, il ne m'affiche rien?)

Merci!

PS: MainWindow.xaml.cs a le 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 modèle de vue se présente comme suit:

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; }
}
Était-ce utile?

La solution

Qui définit MyCollection ? Il ne fournit pas de notification de modification, donc la liaison ne sait pas qu'elle a été modifiée. Changer en:

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

Ou, mieux encore, rendez-le en lecture seule:

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

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

Autres conseils

Dans la fenêtre de sortie de Visual Studio, vous verrez apparaître toutes les erreurs DataBinding susceptibles de vous aider à résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top