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

如何通过CollectionChangedEventHandler触发CSV文件读取方法?

解决思路及代码修改

问题原因

你的写法无效有两个核心问题:

  1. 委托类型不匹配:PageLoad_Alt是RoutedEventHandler(参数为object和RoutedEventArgs),而CollectionChanged事件需要的是NotifyCollectionChangedEventHandler(参数为object和NotifyCollectionChangedEventArgs),两者签名不兼容,无法直接绑定。
  2. 语法错误:PageLoad_Alt()是直接执行方法,而非传递委托引用,正确的委托传递不需要加括号。

解决方案

1. 抽离CSV读取逻辑为独立方法

把原来PageLoad_Alt里的CSV读取代码单独抽出来,让页面加载和集合变更都能复用这个逻辑,同时添加清空集合的操作避免重复数据:

private void LoadAltParkingData()
{
    try
    {
        // 用Path.Combine替代字符串拼接,避免路径分隔符问题
        string filepath = Path.Combine(directory, "ParkingTool_BESTAND.csv");
        
        var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = ";" };

        // 重新加载前清空旧数据
        alte_parking_collection.Clear();

        using (var csv = new CsvReader(new StreamReader(filepath), config))
        {
            csv.Read();
            csv.ReadHeader();

            while (csv.Read())
            {
                string barcodeField = csv.GetField<string>("Barcode");
                string boxField = csv.GetField<string>("BoxNr");
                string datumField = csv.GetField<string>("Datum");
                
                alte_parking_collection.Add(new ParkingClass() 
                { 
                    parking_barcode = barcodeField, 
                    parking_box = boxField, 
                    parking_datum = datumField 
                });
            }
        }
        code_box.Focus();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Bitte Datei überprüfen! " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
        code_box.Focus();
    }
}

2. 修改页面加载方法

让原来的PageLoad_Alt调用抽离后的方法:

//Alte Bestand
private void PageLoad_Alt(object sender, RoutedEventArgs e)
{
    LoadAltParkingData();
}

3. 绑定CollectionChanged事件

给parking_collection添加适配的事件处理方法,在集合变更时调用读取逻辑:

// 初始化parking_collection后添加事件绑定(比如在构造函数或页面初始化代码中)
parking_collection.CollectionChanged += ParkingCollection_CollectionChanged;

// CollectionChanged事件处理方法
private void ParkingCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    LoadAltParkingData();
}

这样不管是页面加载,还是parking_collection发生增删改操作时,都会重新读取CSV并刷新alte_parking_collection。

内容的提问来源于stack exchange,提问作者M.Nasiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:36:00