gpt4 book ai didi

c# - 为什么我需要此数据网格的额外绑定(bind)语法?

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:32 24 4
gpt4 key购买 nike

背景

如果我们有一个 CLR 对象,例如:

class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
}

我们可以创建一个 ObservableCollection,添加一些样板代码,瞧,我们可以使用 XAML 将其绑定(bind)到 DataGrid,如下所示:

<DataGrid ItemsSource="{Binding PropertyOnPersonObject}"\>

并且 DataGrid 知道获取此对象并自动填充每一列。

发生了什么

在 View 模型中,我想创建一个带有 ObservableCollection<decimal> 的单列 DataGrid .所以我做了一个公共(public)属性(property)并像上面一样绑定(bind)。不断发生的是我得到了正确的行数但没有数据。仅使用 ItemsSource 是不够的。

我终于发现我需要这个:

<DataGrid ItemsSource="{Binding PropertyOnSomething}"> 
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding}"/>
</DataGrid.Columns>
</DataGrid>

DataGrid 在列级别需要这个额外的绑定(bind)代码。为什么?

最佳答案

DataGrid.AutoGenerateColumns 属性负责自动在 Datagrid 中为您生成列。

DataGrid 默认将 AutoGenerateColumns 设置为 true。如果您使用了 ObservableCollection<Person>它将遍历您的 Person 的属性列表分类并生成项目属性 - ReadOnlyCollection<ItemPropertyInfo> itemProperties .基于此列表,它将在内部绑定(bind)标题和单元格。

但在第二种情况下,您使用了 ObservableCollection<decimal>这不是对象类型而是值类型。它没有定义其定义的任何属性,因此它不会产生任何 itemProperties列表。因此,您不会在内部完成任何绑定(bind),数据网格将只是空行。

关于c# - 为什么我需要此数据网格的额外绑定(bind)语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516760/

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