You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:35