gre*_*man 3 c# data-binding wpf ienumerable datagrid
假设我有一个带有itemsource绑定到属性Collection的datagrid,例如IEnumerable.当然我为它写了适当的getter和setter.
现在,当我分配给这个属性(Collection)时只是IEnumerable(作为某种方法的结果),如:
Collection = FooMethod(); // FooMethod returns IEnumerable<MyClass>
Run Code Online (Sandbox Code Playgroud)
datagrid将显示空行.行的计数将与Collection的计数匹配.
但当我强制转换时,像这样:
Collection = FooMethodp().ToArray(); // forced fetching data
Run Code Online (Sandbox Code Playgroud)
datagrid现在将显示包含内容的所有行.
那么什么阻止数据网格在纯IEnumerable的情况下显示数据呢?它必须迭代一个集合,所以无论如何都要进行提取.
仅供记录.MyClass是这样的:
public class ErrorsIndicators
{
public double Min { get; set; }
public double Max { get; set; }
public double Avg { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和FooMethod返回(返回yield)几个项目.所以,这里没什么特别的.
很难说没有看到实现FooMethod(),但我怀疑它正在返回一些实现IEnumerable<T>但没有进一步的东西(比如ICollection<T>或IList<T>).在这种情况下,似乎DataGrid无法动态确定列名称,您需要通过DataGrid.Columns属性自己告诉它.
这是我放在一起的一个简单的复制品.
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
如果DataGrid.Columns从XAML中删除它,它将显示三个空行.因此,当源仅实现时IEnumerable<T>,它似乎不是数据源的枚举,而是自动列创建.
| 归档时间: |
|
| 查看次数: |
3145 次 |
| 最近记录: |