基础应用中ObservableList更新时ListView未同步更新问题求助
解决ObservableList更新时ListView未同步的问题
嘿,我之前也碰到过一模一样的问题!看了你给出的Menu类代码,问题很明显——你的Menu类没有实现INotifyPropertyChanged接口,这可是让UI感知到对象属性变化的关键。
你用的ObservableCollection(应该就是你说的ObservableList吧?)只能监测到集合本身的增删操作,但集合里的对象属性变了它管不着,所以ListView自然不会跟着更新。
第一步:给Menu类实现INotifyPropertyChanged
修改你的Menu类,给每个属性加上变更通知逻辑:
using System.ComponentModel; using System.Runtime.CompilerServices; public class Menu : INotifyPropertyChanged { public Menu(string itemname, string itemdescrip, string cost, string allergens) { ItemName = itemname; ItemDescription = itemdescrip; ItemCost = cost; ItemAmount = 0; ItemAllergens = allergens; } private string _itemName; public string ItemName { get => _itemName; set { if (_itemName != value) { _itemName = value; OnPropertyChanged(); } } } private string _itemCost; public string ItemCost { get => _itemCost; set { if (_itemCost != value) { _itemCost = value; OnPropertyChanged(); } } } private string _itemDescription; public string ItemDescription { get => _itemDescription; set { if (_itemDescription != value) { _itemDescription = value; OnPropertyChanged(); } } } private int _itemAmount; public int ItemAmount { get => _itemAmount; set { if (_itemAmount != value) { _itemAmount = value; OnPropertyChanged(); } } } private string _itemAllergens; public string ItemAllergens { get => _itemAllergens; set { if (_itemAllergens != value) { _itemAllergens = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
第二步:确认集合类型和绑定是否正确
还要确保你在ViewModel里用的是ObservableCollection<Menu>而不是普通List:
// ViewModel里的集合定义示例 public ObservableCollection<Menu> MenuItems { get; set; } = new ObservableCollection<Menu>();
另外检查下ListView的ItemTemplate绑定,比如绑定ItemAmount的地方要写成{Binding ItemAmount},别拼错属性名。如果你的MenuItems是在ViewModel里动态赋值的,那ViewModel最好也实现INotifyPropertyChanged,避免集合本身赋值时UI没反应。
这样改完之后,当你修改集合里某个Menu对象的ItemAmount或者其他属性时,ListView就会自动同步更新啦!
内容的提问来源于stack exchange,提问作者user2890149
相关产品推荐
相关产品推荐

