2011-08-16 3 views
1

J'ai une ObservableCollection qui est affichée dans une liste personnalisée. J'ai besoin listbox de mettre à jour la vue en fonction des changements appliqués, comme l'insertion de nouveaux aliments ou de retirer les aliments des parties ObservableCollectionObservableCollection ne met pas à jour le listview

de code sont disponibles ci-dessous

public class lbl 
{ 
    public ObservableCollection<feed> ModifiedItems 
     = new ObservableCollection<feed>(); 

    public lbl() 
    { 
     InitializeComponent(); 
     listBox1.ItemsSource = ModifiedItems ; 
    } 

    public void update(object sender, EventArgs e) 
    { 
     var x = ModifiedItems.Last(); 
     listBox1.Items.Add(x); 
    } 
} 

public class feed 
{ 
    public int ID { get; set; } 
    public int source_id { get; set; } 
    public string title { get; set; } 
    public string source_icon { get; set; } 
    public string url { get; set; } 
    public string pudate { get; set; } 
} 

XAML

<ListBox x:Name="listBox1" > 
    <ListBox.ItemTemplate > 
     <DataTemplate > 
      <StackPanel Width="400" Margin="20" > 
       <Button x:Name="pic" Tag="{Binding Id}"> 
        <Button.Template> 
         <ControlTemplate> 
          <TextBlock Text="{Binding title}" TextWrapping="Wrap" FontFamily="Arial" FontSize="28" Tag="{Binding Id}"/> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 
       <TextBlock Text="{Binding pudate}" TextWrapping="Wrap" FontSize="24"/> 
       <Image Source="{Binding source_icon}" Width="100" Height="60"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Note: Cela ne fait pas partie du code. Il me donne l'erreur en essayant d'ajouter un article "Opération non prise en charge sur la collection en lecture seule."

J'ai essayé la solution affichée ici Implementing CollectionChanged et toujours je reçois la même erreur.

Toute aide s'il vous plaît, Merci à l'avance

Répondre

0

Puisque vous êtes la mise en ItemsSource du ListBox, vous liant la collection ModifiedItems à elle.

Cela signifie que vous devez modifier ModifiedItems, et non le ListBox pour ajouter/supprimer des éléments, qui seront ensuite mis à jour en conséquence. Pourquoi vous voulez dupliquer le dernier élément est au-delà de moi. Mais c'est le changement que vous devez faire.

5

Le problème est avec votre méthode de mise à jour:

public void update(object sender, EventArgs e) 
{ 
    var x = ModifiedItems.Last(); 
    listBox1.Items.Add(x); 
} 

Le ItemsSource de votre ListBox est réglé sur la ModifiedItems qui est un ObservableCollection. Par conséquent, si vous ajoutez ou supprimez des éléments de cette collection, l'interface utilisateur ListBox est automatiquement mise à jour. Par exemple, pour ajouter de nouveaux éléments à votre avis faire simplement ce qui suit:

ModifiedItems.Add(new feed()); 

C'est le point de l'ensemble d'un ObservableCollection, la vue peut l'observer!

Si, au lieu d'ajouter/de supprimer des éléments, vous mettez à jour des éléments existants, vous devez créer feed implémentation INotifyPropertyChanged.

Questions connexes