ListView添加新项不更新显示,删除操作正常的技术问题
问题分析与解决方案
核心问题
新增Order时仅设置了MenuId,未关联对应的Menu对象,导致绑定Menu.Name/Menu.Price时无数据可显示;同时绑定的UpdateSourceTrigger配置错误,且Order类未实现属性变更通知,进一步导致UI无法响应数据变化。
步骤1:新增Order时关联Menu对象
在创建新订单的代码中,直接将选中的Menu对象赋值给Order的Menu属性,确保绑定路径有有效数据:
private Menu _SelectedMenuAdd; public Menu SelectedMenuAdd { get { return _SelectedMenuAdd; } set { _SelectedMenuAdd = value; if (SelectedMenuAdd != null) { Order newOrder = new Order { MenuId = SelectedMenuAdd.Id, Menu = SelectedMenuAdd, // 新增这行,关联Menu对象 TableId = Global.TableParameter, WaiterId = 1, Printstatus = 1, Starttime = DateTime.Now }; SelectedOrderList.Add(newOrder); using (var db = new BonGoContext()) { db.Add(newOrder); db.SaveChanges(); } SelectedMenuAdd = null; } OnPropertyChanged(nameof(SelectedMenuAdd)); OnPropertyChanged(nameof(SelectedOrderList)); } }
步骤2:修正绑定的UpdateSourceTrigger
将XAML中DisplayMemberBinding的UpdateSourceTrigger改为PropertyChanged,确保源属性变化时UI立即更新(LostFocus仅在控件失焦时触发,不适合新增项的实时显示场景):
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Menu.Name, UpdateSourceTrigger=PropertyChanged}" Width="400" /> <GridViewColumn Header="Preis" DisplayMemberBinding="{Binding Menu.Price, UpdateSourceTrigger=PropertyChanged}" Width="80" />
步骤3:确保Order类实现属性变更通知
让Order类继承ObservableObject(与ViewModel一致),或自行实现INotifyPropertyChanged,保证Menu属性变化时UI能同步更新:
class Order : ObservableObject { private Menu _menu; public Menu Menu { get => _menu; set { _menu = value; OnPropertyChanged(nameof(Menu)); } } // 其他属性(如MenuId、Id等)建议也按此方式实现,保证变更通知 }
补充说明
之前绑定Id/MenuId正常,是因为这两个属性在创建Order时直接赋值,且为值类型/字符串,无需导航属性;而Menu是引用类型,未赋值时为null,绑定路径无法找到有效数据,因此UI显示为空。
内容的提问来源于stack exchange,提问作者Picco
相关产品推荐
相关产品推荐

