【问题标题】:Data Binding to the contents of a list数据绑定到列表的内容
【发布时间】:2016-03-14 21:04:47
【问题描述】:

我正在尝试将列表中项目的属性绑定到数据网格。我有以下代码:

  <DataGrid Grid.Column="0" Name="LeftSettingsDataGrid" ItemsSource="{Binding Path=Data}">
    <DataGrid.Columns>
      <DataGridTextColumn Header="Setting Name" Binding="{Binding Path=Settings.SettingName}" />
      <DataGridTextColumn Header="Setting Type" Binding="{Binding Path=Settings.SettingType}" />
    </DataGrid.Columns>
  </DataGrid>

但这会产生一个空的网格视图。

Data 是一个包含Settings 列表的对象,这些对象具有两个公共属性:SettingNameSettingType

基本上,层次结构是这样的: 1. 数据 1.设置 1.设置名称 2.设置类型

数据上下文在主窗口的构造函数中设置,LeftSettingsDataGrid.DataContext = Data;

为什么绑定不起作用?

【问题讨论】:

  • Path=Data 用 Path=Data.Settings 和 Path=Settings.SettingName 用 Path=SettingName 和 Path=Settings.SettingType 用 Path=SettingType 替换

标签: c# wpf xaml data-binding


【解决方案1】:

在您的数据上下文中将此视为一棵树,您有一个显示尽可能多的项目的列表,您的项目来源是设置,您的显示成员是 item.SettingName 等

  <DataGrid Grid.Column="0" Name="LeftSettingsDataGrid" ItemsSource="{Binding Path=Settings}">
    <DataGrid.Columns>
      <DataGridTextColumn Header="Setting Name" Binding="{Binding Path=SettingName}" />
      <DataGridTextColumn Header="Setting Type" Binding="{Binding Path=SettingType}" />
    </DataGrid.Columns>
  </DataGrid>

您的 ItemsSource 是 Data.Settings 而不是 Data

【讨论】:

  • 这不是唯一的方法
  • 当然,有很多方法可以实现一切,但这是当前示例中代码更改较少的方法
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2011-09-07
  • 2016-10-25
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
相关资源
最近更新 更多