首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Forms DataBinding不会更新

Xamarin Forms DataBinding不会更新
EN

Stack Overflow用户
提问于 2016-05-26 18:15:30
回答 1查看 67关注 0票数 0

我正在与DataBindings作斗争。我有一个带有项目的ListView (正确显示),我需要能够编辑列表中的项目。

我选择一个项目,它打开一个模式(工作良好)与所选项目的信息(工作良好)。

我有以下对象:

代码语言:javascript
复制
 public class Investigation : IDisposable
 {
     public List<InjuredPerson> InjuredPersonnel { get; set; }
     ...
 }

我的ViewModel是这样的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
 <ListView ItemsSource="{Binding Investigation.InjuredPersonnel, Mode=TwoWay}">
...

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

代码语言:javascript
复制
MessagingCenter.Send<EditInjuredPerson, InjuredPerson>(this, "InjuredPersonEdited", _injuredPerson);

和接收端(工作正常)

代码语言:javascript
复制
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;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2016-05-26 18:39:37

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

或者,将List<>转换为ObservableCollection<>。

代码语言:javascript
复制
public List<InjuredPerson> InjuredPersonnel { get; set; }

变成了

代码语言:javascript
复制
public ObservableCollection<InjuredPerson> InjuredPersonnel { get; set; }

Here is a related thread.

代码语言:javascript
复制
public class Investigation : IDisposable, INotifyPropertyChanged
     {
         private List<InjuredPerson> _injuredPersonnel;
         public List<InjuredPerson> InjuredPersonnel  { 
            get {
                return _injuredPersonnel;
            } 
            set
            {
                _injuredPersonnel = value;
                OnPropertyChanged("InjuredPersonnel");
            }
         }
         ...
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37457908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档