gpt4 book ai didi

c# - 为什么纯 IEnumerable 的内容对于 WPF DataGrid 是不可见的?

转载 作者:行者123 更新时间:2023-11-30 15:10:12 25 4
gpt4 key购买 nike

假设我有一个数据网格,其中 itemsource 绑定(bind)到属性 Collection,例如 IEnumerable。当然,我为它写了适当的 getter 和 setter。

现在,当我将 IEnumerable 分配给此属性(集合)时(作为某种方法的结果),例如:

Collection = FooMethod(); // FooMethod returns IEnumerable<MyClass>

datagrid 将显示空行。行的数量将与集合的数量相匹配。

但是当我强制转换时,像这样:

Collection = FooMethodp().ToArray(); // forced fetching data

datagrid 现在将显示所有包含内容的行。

那么,在纯 IEnumerable 的情况下,是什么阻止了 datagrid 显示数据?它必须遍历一个集合,因此无论如何都会进行提取。

编辑

仅作记录。我的类是这样的:

public class ErrorsIndicators
{
public double Min { get; set; }
public double Max { get; set; }
public double Avg { get; set; }
}

并且 FooMethod 返回(return yield)几个项目。所以,这里没有什么特别的。

最佳答案

没有看到 FooMethod() 的实现很难说,但我怀疑它正在返回实现 IEnumerable<T> 的东西但没有进一步的(例如 ICollection<T>IList<T> )。在这种情况下,似乎 DataGrid 无法动态确定列名,您需要通过 DataGrid.Columns 自行告诉它属性(property)。

这是我整理的一个简单的重现。

MainWindow.xaml.cs:

namespace DataGridTest
{
using System.Collections.Generic;
using System.Windows;

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

Customers = this.GetCustomers();
DataContext = this;
}

private IEnumerable<Customer> GetCustomers()
{
yield return new Customer() { Name = "first" };
yield return new Customer() { Name = "second" };
yield return new Customer() { Name = "third" };
}

public IEnumerable<Customer> Customers
{
get;
set;
}
}

public class Customer
{
public string Name
{
get;
set;
}
}
}

MainWindow.xaml:

<Window x:Class="DataGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DataGrid ItemsSource="{Binding Customers}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
</Window>

如果删除 DataGrid.Columns从 XAML 中,它显示三个空行。因此,当源仅实现 IEnumerable<T> 时,似乎不是数据源的枚举被破坏了。 ,而是自动创建列。

关于c# - 为什么纯 IEnumerable 的内容对于 WPF DataGrid 是不可见的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com