HelloWorld样式DataGrid结果为空行

时间:2012-03-16 15:52:27

标签: wpf datagrid

xaml方:

<DataGrid Name="MyGrid" ItemsSource="{Binding}" />

我也尝试过:

<DataGrid Name="MyGrid" ItemsSource="{Binding MyObj}" />

背后的代码:

MyGrid.ItemsSource = new[] {
    new MyObj{A = "aaa", B = "sss"},
    new CompteurDate{A = "bbb", B = "eee"}
};

结果显示网格中的项目数正确,但行为空白。 我确定这很容易,但我卡住了: - / 有什么想法吗?

提前致谢, 埃里克

2 个答案:

答案 0 :(得分:0)

我不是百分之百确定你在这里要做什么,但我发现有一些可能导致问题的事情

默认情况下,DataGrids会根据ItemsSource中对象的属性自动生成列。问题是,ItemsSource中有两个不同的对象,因此它不知道使用属性的对象。我甚至无法使用您提供的代码隐藏重现您的错误,因为它告诉我“找不到隐式类型数组的最佳类型”,尽管如果我指定ItemsSourceobject数组,然后我得到你描述的结果。

第二部分令我困惑的是你在XAML和代码隐藏中都设置了ItemsSource。您只需要设置一次。

现在你可以将代码隐藏中的DataGrid.DataContext设置为一个对象,然后将XAML中的ItemsSource绑定到该对象上存在的属性,那么也许这就是你所拥有的试图做。

答案 1 :(得分:0)

很抱歉Rachel,我没有正确发布:

MyGrid.ItemsSource = new[] {
    new MyObj{A = "aaa", B = "sss"},
    new CompteurDate{A = "bbb", B = "eee"}
};

应该是:

MyGrid.ItemsSource = new[] {
    new MyObj{A = "aaa", B = "sss"},
    new MyObj{A = "bbb", B = "eee"}
};

很抱歉......(我是

无论如何,我找到了自己的方式!我使用的对象类型是有原因的。惠特这不起作用:

public class MyObject
{
    public string A;
    public string B;
}

就像那样:

public class MyObject
{
    public string A { get; set; }
    public string B { get; set; }
}

所以我走出了我的世界代码,回到了我的现实生活实现,并且....它没有用,该死的。 我有一个IEnumerable而不是一个数组。长话短说,最后添加了一个“ToArray()”,但我不明白为什么。好吧,我的可枚举是迟到的执行,但是读取其ItemsSource的数据网格已经触发了这个执行,不是吗?

所以,问题已经解决了,但是如果有人有理性的光来施展这种魔力......

谢谢!