【问题标题】:Xamarin Forms DataBinding Wont updateXamarin Forms DataBinding 不会更新
【发布时间】:2016-09-24 06:48:59
【问题描述】:

我正在为 DataBindings 苦苦挣扎。我有一个包含项目的 ListView(显示正确),我需要能够编辑列表中的项目。

我选择了一个项目,该项目使用所选项目的信息打开一个模式(工作正常)(工作正常)。当我点击保存时,该项目未更新 - 显示未更新,但如果我再次选择该项目,则数据正确保存。

我有以下对象:

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

我的 ViewModel 是这样的:

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();
    }
}

XAML:

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

更新信息的页面发送消息如下:(工作正常)

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

接收方(工作正常)

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;
        }
    }

【问题讨论】:

  • InjuredPersonnel 列表需要在其上引发 OnProprertyChanged 事件,而不是调查(或除此之外)。

标签: c# data-binding xamarin.forms


【解决方案1】:

InjuredPersonnel 列表需要在其上引发的 OnProprertyChanged 事件,而不是调查(或除此之外)。

或者,将 List 转换为 ObservableCollection。

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

变成

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");
            }
         }
         ...
     }

【讨论】:

  • 您好,当您说“InjuredPersonnel 列表需要在其上引发 OnPropertyChanged 事件,而不是调查(或除此之外)”时。我该怎么做呢?另外,我使用了 ObservableCollection - 它仍然没有更新
  • 嘿,那没用。它没有触发调查中的“OnPropertyChanged”事件
  • 啊,在您的 SaveInjuredPerson() 方法中,您也需要提高相关的 PropertyChanged。
  • 糟糕,我被自己的方法弄糊涂了!我会尝试:D
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2016-10-03
  • 2017-12-04
相关资源
最近更新 更多