如何解决Xamarin.Forms NotifyPropertyChanged不更新已经存在的项目Android
<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 举报,一经查实,本站将立刻删除。