2016-05-26 12 views
0

Ich habe Probleme mit DataBindings. Ich habe eine ListView (wird korrekt angezeigt) mit Elementen und ich muss in der Lage sein, die Elemente in der Liste zu bearbeiten.Xamarin Forms DataBinding Wont Update

Ich wähle ein Element, das ein Modal öffnet (funktioniert gut) mit den Informationen des ausgewählten Elements (funktioniert gut). Wenn ich auf Speichern klicke, wird das Element nicht aktualisiert - Die Anzeige wird nicht aktualisiert, aber wenn ich das Element erneut auswähle, werden die Daten korrekt gehalten.

Ich habe folgendes Objekt:

public class Investigation : IDisposable 
{ 
    public List<InjuredPerson> InjuredPersonnel { get; set; } 
    ... 
} 

Mein Ansichtsmodell ist wie folgt:

public class InvestigateUtilityDamagesViewModel : INotifyPropertyChanged 
{ 
    Investigation investigation; 
    private InvestigateDamages damage; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public InvestigateUtilityDamagesViewModel(InvestigateDamages damage) 
    { 
     this.damage = damage; 
     Investigation = new Investigation(); 
     Investigation.DamageID = damage.DamageID; 
     Investigation.InjuredPersonnel = damage.DamageDetails.InjuredPersonnel; 
    } 

    public Investigation Investigation 
    { 
     get { return investigation; } 
     set 
     { 
      if (investigation == value) 
      { 
       return; 
      } 
      investigation = value; 
      OnPropertyChanged("Investigation"); 
     } 
    } 

    void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     SaveInvestigation(); 
    } 
} 

Die XAML:

<ListView ItemsSource="{Binding Investigation.InjuredPersonnel, Mode=TwoWay}"> 
... 

Die Seite, die Informationen aktualisiert eine Nachricht sendet, wie so : (funktioniert einwandfrei)

MessagingCenter.Send<EditInjuredPerson, InjuredPerson>(this, "InjuredPersonEdited", _injuredPerson); 

Und die Empfangsseite (funktioniert)

private void SaveInjuredPerson(EditInjuredPerson sender, InjuredPerson InjuredPerson) 
    { 
     var Injured = this.FindByName<ListView>("listInjuries").SelectedItem as InjuredPerson; 
     if (Injured != null) 

     { 
      Injured.Name = InjuredPerson.Name; 
      Injured.Position = InjuredPerson.Position; 
      Injured.ContactNumber = InjuredPerson.ContactNumber; 
      Injured.Injury = InjuredPerson.Injury; 
      Injured.NextOfKinName = InjuredPerson.NextOfKinName; 
      Injured.NextOfKinNumber = InjuredPerson.NextOfKinNumber; 
     } 
    } 
+0

Die InjuredPersonnel Liste der OnProprertyChanged Ereignis auf sie erhöht braucht, nicht die Untersuchung (oder zusätzlich zu). –

Antwort

0

Die InjuredPersonnel Liste muss die OnProprertyChanged Ereignis auf sie erhöht, nicht die Untersuchung (oder zusätzlich zu).

Alternativ konvertieren Sie die Liste <> in ObservableCollection <>.

public List<InjuredPerson> InjuredPersonnel { get; set; } 

wird

public ObservableCollection<InjuredPerson> InjuredPersonnel { get; set; } 

Here is a related thread.

public class Investigation : IDisposable, INotifyPropertyChanged 
    { 
     private List<InjuredPerson> _injuredPersonnel; 
     public List<InjuredPerson> InjuredPersonnel { 
      get { 
       return _injuredPersonnel; 
      } 
      set 
      { 
       _injuredPersonnel = value; 
       OnPropertyChanged("InjuredPersonnel"); 
      } 
     } 
     ... 
    } 
+0

Hallo, wenn Sie sagen "Die Liste der verletztenPersonen benötigt das Ereignis OnPropertyChanged, das darauf ausgelöst wird, nicht die Untersuchung (oder zusätzlich zu)." Wie mache ich das? Auch habe ich ObservableCollection verwendet - es hat noch nicht aktualisiert –

+0

Heya, das hat nicht funktioniert. Es löst nicht das "OnPropertyChanged" -Ereignis in Investigation aus –

+0

Ah, auf Ihrer SaveInjuredPerson() -Methode müssen Sie auch das entsprechende PropertyChanged auslösen. –