2009-08-14 5 views
0

Ceci est vraiment particulier. J'ai essayé un simple exemple de programme de liaison de données. J'ai essayé de lier une collection (IList) à une zone de liste. Lorsque je modifie la collection, la zone de liste est mise à jour uniquement si je maximise la fenêtre. Voici les extraits,DataSource reflété après avoir maximisé la fenêtre dans wpf

<ListBox x:Name="myBirthdaysListBox" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <UniformGrid> 
       <Label Content="{Binding Name}"></Label> 
       <Label Content="{Binding DateOfBirth}"></Label> 
      </UniformGrid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

public Window1() 
{ 
    InitializeComponent(); 
    myCalendar = new List<Calendar>(); 
    myBirthdaysListBox.DataContext = myCalendar; 
} 

Je suis juste un débutant en wpf. Veuillez me le faire savoir, si j'ai fait quelque chose de terriblement mal ici.

Répondre

0

Essayez d'utiliser un BindingList<Calendar> plutôt qu'un simple List<Calendar>, car la liste de liaison déclenche des événements lorsque des éléments sont ajoutés/supprimés/etc.

Ce que vous voyez est le contrôle qui est redessiné lorsque vous redimensionnez, et il passe en revue toutes les données à nouveau.

Du haut de ma tête, je crois que vous avez besoin de mettre en œuvre INotifyPropertyChanged sur votre Calendar de telle sorte que la liste de liaison est notifiée si un élément il change

+0

Oui, cela semble fonctionner (j'ai remplacé la liste avec BindingList). Si je veux rester dans la liste, est-ce que ma classe Calendar devrait hériter de l'interface INotifyPropertyChanged ?? J'ai essayé de le faire, ça n'a aucun effet. Peux-tu m'expliquer pourquoi? – sudarsanyes

+0

À quoi ressemble votre implémentation de INotifyPropertyChanged? –

+0

if (PropertyChanged! = Null) {PropertyChanged (this, new PropertyChangedEventArgs ("Nom")); PropertyChanged (this, new PropertyChangedEventArgs ("DateOfBirth")); } J'ai ajouté cela au constructeur de la classe Calendar car c'est le seul endroit d'où vous pouvez définir les valeurs des champs. Donc, je soulève PropertyChanged pour les deux champs – sudarsanyes

Questions connexes