【问题标题】:WPF Datagrid binding to ObservableCollection no columns generatedWPF Datagrid 绑定到 ObservableCollection 没有生成列
【发布时间】:2010-08-26 14:07:29
【问题描述】:

我正在将数据网格绑定到一些数据并使用 AutoColumnGeneration。对数据集使用常规 linq 查询时,一切正常:

var queryAll = from actor in actorsAll
select new
   {
       ActorName = actor.IsPerson ? actor.FirstName + " " + actor.LastName : actor.CompanyName
   };

    MalatDetailsBudgetGridUC.ItemsSource = queryAll;

但由于我希望我的网格绑定到 ObservableCollection,我正在尝试使用以下内容:

ActorsCollection collection = new ActorsCollection(actorType);
var queryAll = from actor in collection
    select new
    {
        ActorName = actor.IsPerson ? actor.FirstName + " " + actor.LastName : actor.CompanyName
    };

MalatDetailsBudgetGridUC.ItemsSource = queryAll;

使用它时,我的网格会完全按照应有的方式填充(细小的)行,但不会生成任何列。

B.T.W - ActorsCollection 是一个已实现的 ObservableCollection,它将自身与 Actor 实体一起添加。

请帮忙!!

【问题讨论】:

    标签: wpf wpf-controls binding wpfdatagrid


    【解决方案1】:

    好吧,我不能说我了解多少:标题说的是数据网格,但在你谈到树视图的问题中。

    假设您将 queryAll 设置为网格的 DataContext,这两个代码块之间应该没有任何区别。您确定 DataContext 设置/绑定正确吗?

    编辑:还可以尝试使用调试器查看匿名构造函数创建的类型,这可能会给您一些想法。

    编辑:要在此处添加答案,问题是第二种形式创建了一个迭代器,而数据网格(有趣的是)被它弄糊涂了。最快的方法是强制枚举器使用 ToList() 或类似方法生成集合。

    【讨论】:

    • 抱歉树/网格错误。我刚刚编辑了它。这都是关于 DataGrid 的。关于创建的类型:使用数据集(块 1)时,我创建了一个 ObjectQuery,但使用 ObservableCollection 时,我创建了以下类型: System.Linq.Enumerable.WhereSelectEnumerableIterator 而第二个块当然与首先,正如我已经提到的。
    • 尝试在迭代器上强制 ToList() 然后使用它。
    猜你喜欢
    • 2017-04-16
    • 2013-10-14
    • 2015-01-26
    • 2015-04-02
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2017-02-08
    相关资源
    最近更新 更多