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

WPF中点击一个ListView元素如何刷新另一个ListView(POS系统场景)

实现方案

1. 修改ViewModel的商品选中逻辑

直接在ArticleSelected属性的setter中添加商品到订单列表的逻辑,支持同款商品数量自动累加,避免重复生成行:

注意先把原来的_ArticleSelected字段初始化代码改成private ArticleModel _ArticleSelected;,去掉默认的new ArticleModel(),避免页面加载时自动添加空商品到订单。

public ArticleModel ArticleSelected
{
    get { return _ArticleSelected; }
    set
    {
        _ArticleSelected = value;
        NotifyPropertyChanged(nameof(ArticleSelected));
        
        // 新增添加到订单列表的逻辑
        if (_ArticleSelected != null)
        {
            // 先查找订单中是否已有同款商品
            var existedItem = ListCommande.FirstOrDefault(x => x.IdArticle == _ArticleSelected.IdArticle);
            if (existedItem != null)
            {
                // 已有同款,数量+1
                existedItem.Quantite += 1;
                // 如果ArticleModel实现了INotifyPropertyChanged,这里不需要额外操作,否则手动刷新订单视图
                CommandeCollection.Refresh();
            }
            else
            {
                // 没有同款,新增商品到订单,注意不要直接用原有实例,避免两边数据联动修改
                ListCommande.Add(new ArticleModel
                {
                    IdArticle = _ArticleSelected.IdArticle,
                    NomArticle = _ArticleSelected.NomArticle,
                    Prix = _ArticleSelected.Prix,
                    Code = _ArticleSelected.Code,
                    Quantite = 1,
                    // 其他需要的属性自行赋值
                });
            }
            
            // 可选:计算订单总价,替换原来写死的金额
            CalculTotalAmount();
        }
    }
}

// 新增总价计算方法
private void CalculTotalAmount()
{
    TotalAmount = ListCommande.Sum(x => x.Prix * x.Quantite);
}

// 新增总价属性用于绑定
private decimal _totalAmount;
public decimal TotalAmount
{
    get => _totalAmount;
    set
    {
        _totalAmount = value;
        NotifyPropertyChanged(nameof(TotalAmount));
    }
}

2. XAML调整(可选,确保点击图片触发选中)

如果当前点击图片没有触发ListView的选中事件,可以给商品模板里的Image控件加IsHitTestVisible="True"确保点击事件能透传到ListView项:
找到商品列表的Image标签,修改为:

<Image ToolTip="{Binding Carracteristique}"  
       Source="https://phonesdata.com/files/models/Xiaomi-Redmi-Note-10S-298.jpg" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Top" 
       Stretch="UniformToFill" 
       MinHeight="50" 
       MaxHeight="100"
       IsHitTestVisible="True" />

如果要实现点击图片即时触发,也可以给Image加MouseLeftButtonDown事件,后台代码直接处理:
先在XAML加事件:

<Image ... MouseLeftButtonDown="Image_MouseLeftButtonDown" />

然后在ArticlesDetails.xaml.cs后台加逻辑:

private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (sender is Image img && img.DataContext is ArticleModel article)
    {
        var vm = DataContext as ArticlesDetailsViewModel;
        vm.ArticleSelected = article;
    }
}

3. 总价绑定替换(可选)

把订单列表页写死的总价改成绑定你的TotalAmount属性:

<Label Grid.Row="1" Grid.Column="1" FontWeight="SemiBold" 
       Content="{Binding TotalAmount, StringFormat={}{0} XFA}"  
       FontSize="17" 
       Width="auto" 
       VerticalAlignment="Center" 
       HorizontalAlignment="Stretch" 
       FontStyle="Normal"  />

说明

  • 因为ListCommande是ObservableCollection类型,添加/修改元素时会自动发送变更通知,绑定的CommandeCollection会自动刷新,不需要额外手动调用刷新方法。
  • 注意ArticleModel类需要给Quantite属性也实现INotifyPropertyChanged,这样修改数量时订单列表会自动更新数值。

内容的提问来源于stack exchange,提问作者Jules auffred

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:36:03