【问题标题】:WPF DataGrid Get Cell Content from DataGridTemplateColumnWPF DataGrid 从 DataGridTemplateColumn 获取单元格内容
【发布时间】:2019-07-03 14:25:55
【问题描述】:

我有一个 dataTable 绑定到 dataGrid:

CS:

SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter(_command);
DataTable dataTable = new DataTable("Inventory");
sQLiteDataAdapter.Fill(dataTable);
for (int i = 0; i < dataTable.Rows.Count; i++)
{
    dgridTenderInventory.Items.Add(new
      {
         ID = dataTable.Rows[i]["id"],                            
         Specs = dataTable.Rows[i]["specs"],
         Image = dataTable.Rows[i]["image"]                            
       });
}

XAML:

 <DataGrid x:Name="dgridTenderInventory" RowHeaderWidth="0"  MouseDown="DgridTenderInventory_MouseDown">
    <DataGrid.Columns>
       <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
       <DataGridTemplateColumn Header="Image">
           <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Height="50" Source="{Binding Image, Converter={StaticResource BinaryImageConverter}}"/>
                </DataTemplate>
           </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
       <DataGridTemplateColumn Header="Specs">
           <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Specs}" TextWrapping="Wrap"/>
                </DataTemplate>
           </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
     </DataGrid.Columns>
  </DataGrid>

我可以通过选择这样的行来获取 ID (DataGridTextColumn) 的单元格值:

object item = dgridTenderInventory.SelectedItem;
string ID = dgridTenderInventory.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;

但是当我想要获取 Specs(作为文本)或 Image(作为图像)时,它会显示“...返回 null”。可能它来自DataGridTemplateColumn。如何从 DataGridTemplateColumn 内部获取值? (特别是我需要获取图像并设置图像(称为imgPopup),就像dataGrid图像单元格一样)

string specs= dgridTenderInventory.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text; // return null
imgPopup.Source = dgridTenderInventory.SelectedCells[1].Column.GetCellContent(item) as Image).Source ; // ?? how does it be implemented?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    DataGridTemplateColumn 只是为 DataGrid 上的列定义模板样式,您永远不应该在此元素上定义绑定,绑定应该在数据级别完成。

    【讨论】:

    • 我刚刚意识到我已经在数据级别使用了绑定。你能澄清一下吗?
    【解决方案2】:

    我找到了solution。 我编辑了代码,它可以工作:

    string specs = (VisualTreeHelper.GetChild(dgridTenderInventory.Columns[2].GetCellContent(item), 0) as TextBlock).Text;
    imgPopup.Source = (VisualTreeHelper.GetChild(dgridTenderInventory.Columns[1].GetCellContent(item), 0) as Image).Source;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多