微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin.Forms NotifyPropertyChanged不更新已经存在的项目Android

如何解决Xamarin.Forms NotifyPropertyChanged不更新已经存在的项目Android

我有一个这样的ListView:

        <ListView x:Name="ItemsListView"
                ItemsSource="{Binding Items}"
                VerticalOptions="FillAndExpand"
                HasUnevenRows="true"
                RefreshCommand="{Binding LoadItemsCommand}"
                IsPullToRefreshEnabled="False"
                IsRefreshing="{Binding IsBusy,Mode=OneWay}"
                CachingStrategy="RecycleElement"
                ItemSelected="OnItemSelected">

并且我的viewmodel具有此定义,并且我的Model类如下:

    public ObservableCollection<IncomingJobItem> Items { get; set; }
    public class IncomingJobItem
    {
        public int Index { get; set; }

        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("amount")]
        public int Amount { get; set; }
    }

现在,当我更新viewmodelObject.Items调用NotifyPropertyChanged时,ListView中已经存在的项目不会得到更新。

示例:

// change already existing item
viewmodelObject.Items[0].Amount = 3;

// notify item in Items has changed
viewmodelObject.NotifyPropertyChanged("Items");

// nothing happens,item 0 in the list stays with the old amount...
// expected is to update the item in the list to display 3

但是,当我创建新元素并将其添加viewmodelObject.Items时,ListView会添加新的Item,但不会更新现有的Item。我该怎么办?

viewmodelObject.NotifyPropertyChanged("Items.Amount");也不执行任何操作。

解决方法

感谢@Jason在评论中我得到了答案。

我的模型类未实现INotifyPropertyChanged

实现可以像这样简单:

    public class IncomingJobItem : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged([CallerMemberName] string name = null)
        {
            PropertyChanged?.Invoke(this,new PropertyChangedEventArgs(name));
        }

        public int Index { get; set; }

        [JsonProperty("id")]
        public string Id { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("amount")]
        public int Amount { get; set; }
    }

可以这样更新:

incomingJobItemObj.OnPropertyChanged("Amount"); // or any other property name

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。