【问题标题】:Linq Wpf Average query not populating datagridLinq Wpf 平均查询未填充数据网格
【发布时间】:2015-12-09 04:08:11
【问题描述】:

我正在尝试根据文件扩展名获取平均文件大小并将其显示在数据网格中。我有这个方法/查询:

public List<FileTypeAverage> getAverageFileSizes(List<DirectoryItem> e)
{

    var result = e
        .Where(r => r.IsFile == true)
       .GroupBy(g => g.File.Extension, r => r.File.Length)
       .Select(g => new FileTypeAverage(g.Key, g.Average()));

    return result.ToList();
}

我将结果设置为 viewSource.Source,但数据网格中没有显示任何内容。我认为我的查询有问题,因为我是 Linq 的新手,但我似乎无法弄清楚它应该如何完成。我知道我传入的列表不是空的,因为我在将列表传递给方法并尝试显示平均值之前显示了该列表。

编辑: 我这里用的方法:

private void Window_Loaded(object sender, RoutedEventArgs e)
{

    System.Windows.Data.CollectionViewSource fileTypeAverageViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("fileTypeAverageViewSource")));
    fileTypeAverageViewSource.Source = sorter.getAverageFileSizes(List);
}

}

DirectoryItem 类:

 public class DirectoryItem
    {
        public bool IsFile { get; }
        public DirectoryInfoPlus Dir { get; set; }
        public FileInfo File { get; }
        public FileSystemInfo Either { get { return IsFile ? (File as FileSystemInfo) : (Dir.Dir as FileSystemInfo); } }

        public DirectoryItem(DirectoryInfoPlus dir)
        {
            Dir = dir;
            IsFile = false;
        }

        public DirectoryItem(FileInfo file)
        {
            File = file;
            IsFile = true;
        }


    }

DirectoryInfoPlus 只是一个 DirectoryInfo 和其中所有文件的组合大小存储在一个 long 中。

【问题讨论】:

  • 此方法执行完毕后,result 中的内容是什么?调试!!!
  • 方法getAverageFileSizes是否在辅助线程中调用?
  • 我用的方法设置视图源。我将对其进行编辑以显示这一点。
  • 也发布 DirectoryItem 类。
  • 我添加了 DirectoryItem 类。

标签: c# wpf linq datagrid average


【解决方案1】:

我已经检查了您的代码。 LINQ 查询很好。

您只需设置 ItemsSource 属性,如下所示:

Dgrid.ItemsSource = getAverageFileSizes(records);

不需要CollectionViewSource。

但如果它是您想要使用的,那么请展示您如何声明它并尝试使用它。

【讨论】:

    【解决方案2】:

    好的,所以我解决了我的问题。在我查询之前,我的列表没有正确设置。 我有:

    private void typesSizeButt_Click(object sender, RoutedEventArgs e) { TypeSizeDisplay sizeDisplay = new TypeSizeDisplay();

        if(sizeDisplay.ShowDialog() == true){
           sizeDisplay.List = DirectoryItems;
        }
    }
    

    我改成:

    private void typesSizeButt_Click(object sender, RoutedEventArgs e) { TypeSizeDisplay sizeDisplay = new TypeSizeDisplay(); sizeDisplay.List = 目录项; sizeDisplay.ShowDialog(); }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2013-12-19
      • 2011-06-15
      • 1970-01-01
      • 2017-04-14
      • 2020-11-17
      相关资源
      最近更新 更多