ListBox-Elements nicht aktualisiert, wenn die Eigenschaft geändert hat

Problem habe ich die Aktualisierung Listbox mit ObservableCollection als property der collection ändert (hinzufügen/entfernen von Elementen aus der Liste, funktioniert einwandfrei):

listbox gesetzt hat ItemsSource="{Binding Path=AllPerson}" - und Daten-Kontext in den code-behind festgelegt ist, wie dies this.DataContext = allPersonClass;.

allPersonClass enthält ObservableCollection<Person> allPerson

Klasse Person enthält Eigenschaften wie Name etc.

Habe ich überschrieben person ToString Methode zurück Name Eigenschaft in listBox zeigt gültige Daten

Ich habe versucht, die Person implementieren INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(object sender, string propertyName) {
    if (this.PropertyChanged != null) {
        PropertyChanged(sender, new PropertyChangedEventArgs(propertyName));
    }
}

public string Name {
     get { return name; }
     set {
        name = value;
        onPropertyChanged(this, "allPersonClass");
     }
}

und in jeder Eigenschaft setter hat onPropertyChanged(this, "propertyName"); ausgeführt wird, aber listBox nie updates bereits erstellten Element

Irgendeine Idee was falsch sein könnte?

hier ist Fenster xaml-Code mit listBox

     <Button x:Name="btnDetail" Content="Detail" HorizontalAlignment="Left" Margin="361,249,0,0" VerticalAlignment="Top" Width="75" Click="ButtonDetailClick"/>
     <ListBox x:Name="listPerson" ItemsSource="{Binding Path=AllPerson}" HorizontalAlignment="Left" Height="170" Margin="33,29,0,0" VerticalAlignment="Top" Width="155" IsSynchronizedWithCurrentItem="True"/>
     <Button x:Name="btnLoad" Content="Load" HorizontalAlignment="Left" Margin="58,249,0,0" VerticalAlignment="Top" Width="75" Click="btnLoad_Click"/>
     <Button x:Name="btnSave" Content="Save" HorizontalAlignment="Left" Margin="138,249,0,0" VerticalAlignment="Top" Width="75" Click="ButtonSaveClick"/>

dies ist Teil der Detailansicht-Fenster, in dem änderungen vorgenommen werden (der gebundenen Person)

<TextBox Text="{Binding Path=Name}" Height="23" HorizontalAlignment="Left" Margin="118,20,0,0" Name="txtName" VerticalAlignment="Top" Width="141" />

hier ist Teil AllPersonClass:

public class AllPersonClass {
  private ObservableCollection<Person> allPerson;

public AllPersonClass() {
     allPerson = new ObservableCollection<Person>();
  }

public ObservableCollection<Person> AllPerson {
     get { return allPerson; }
     set { allPerson = value; }
  }

 public void addPerson(Person newPerson) {
     allPerson.Add(newPerson);
  }


public Person getPerson(int personIndex) {
     return allPerson[personIndex];
  }
}

BEARBEITEN

hier ist der relevante Teil der Methode, um die änderungen zu speichern in der Detailansicht

private void OnBtnSaveClick(object sender, RoutedEventArgs e) {
     person.Name = txtName.Text;
     person.SurName = txtSurName.Text;
}

beachten Sie, dass änderungen in der ObservableCollection allPerson nur listBox zeigt alte Daten

  • Hier zu helfen, solltest du post haben-ein Beispiel von Xaml und eine Probe von der ViewModel-Implementierung zeigt den property change notification.
  • Unterstützen die Implementierung der Klasse allPersonClass
  • ich glaube, ich brauche etwas Schlaf, dann werde ich das prüfen und meine Fortschritte posten
  • okay, gute Nacht 🙂
  • Diese Eigenschaft Geändert raiser gab mich nervös zucken. Zum Glück wenigstens eine Antwort-Adressen.
InformationsquelleAutor Abdul | 2013-03-13
Schreibe einen Kommentar