You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin.Forms.DataGrid中把字典值设为列的PropertyName?

问题:Xamarin.Forms.DataGrid动态生成列时出现属性绑定找不到报错

使用Xamarin.Forms.DataGrid通过循环动态生成列,其中kvp.Value返回数组,尝试将数组元素设置为列的PropertyName,期望实现Key1,Value[1], Key2,Value[2]的输出格式,但控制台报错:

Binding: 'status' property not found on

相关代码

C# 代码

foreach (KeyValuePair<string, string[]> kvp in myDictionary3)
{
    for (int i = 0; i < kvp.Value.Length; i++)
    {
        DataGridColumn dataGridColumn = new DataGridColumn()
        {
            Title = kvp.Key,
            PropertyName = kvp.Value[i],
        };
        dataColumn.Columns.Add(dataGridColumn);
    }
}

XAML 代码

<ScrollView Orientation="Both" Grid.ColumnSpan="2" Grid.RowSpan="4">
    <dg:DataGrid ItemsSource="{Binding RoomTypes}" x:Name="dataColumn" SelectionEnabled="True" SelectedItem="{Binding SelectedRoom}"
        RowHeight="70" HeaderHeight="50" BorderColor="#CCCCCC" HeaderBackground="#E0E6F8"
        PullToRefreshCommand="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}">
        
        <dg:DataGrid.HeaderFontSize>
            <OnIdiom  x:TypeArguments="x:Double">
                <OnIdiom.Tablet>15</OnIdiom.Tablet>
                <OnIdiom.Phone>13</OnIdiom.Phone>
            </OnIdiom>
        </dg:DataGrid.HeaderFontSize>
        <dg:DataGrid.Columns>

            <dg:DataGridColumn PropertyName="Name" Width="3*" >
                <dg:DataGridColumn.FormattedTitle>
                    <FormattedString>
                        <Span Text="Room Type" FontSize="13" TextColor="Black" FontAttributes="Bold" />
                    </FormattedString>
                </dg:DataGridColumn.FormattedTitle>
            </dg:DataGridColumn>
            
        </dg:DataGrid.Columns>
        <dg:DataGrid.RowsBackgroundColorPalette>
            <dg:PaletteCollection>
                <Color>#F2F2F2</Color>
                <Color>#FFFFFF</Color>
            </dg:PaletteCollection>
        </dg:DataGrid.RowsBackgroundColorPalette>

    </dg:DataGrid>
</ScrollView>

解决方案

  • 确认实体类属性存在
    报错提示的status属性不存在于RoomTypes集合的实体类中,需检查实体类是否定义了所有kvp.Value数组中包含的属性,属性名需完全匹配(C#属性名大小写敏感)。例如:

    public string Status { get; set; } // 确保属性名与PropertyName的字符串一致
    
  • 调整动态列生成时机
    必须在RoomTypes数据源加载完成后再执行列生成逻辑,避免数据源未初始化导致绑定失败。可在ViewModel的RoomTypes集合填充完成后触发,或在页面的OnAppearing方法中执行列生成代码。

  • 验证字典中属性名的正确性
    打印kvp.Value[i]的内容,确认每个值都是实体类中真实存在的属性名,排查拼写错误或无效字符串。

  • 处理嵌套属性绑定(若有)
    如果要绑定的是嵌套对象的属性,需使用正确的绑定路径格式,比如NestedObject.Status,而非直接写status。

内容的提问来源于stack exchange,提问作者Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:31:35