如何获取绑定到wpf中datagrid列的属性的名称

本文关键字:datagrid 属性 wpf 何获取 获取 绑定 | 更新日期: 2023-09-27 18:26:02

我有一个几乎有30列的数据网格,我需要获得绑定到列的属性的名称。我正在使用数据网格的datagrid_selectedcellschanged(sender,selectedeventargs)事件。

如何获取绑定到wpf中datagrid列的属性的名称

我不确定属性名称-列标题单元格值是什么意思

如果你的意思是列标题,你可以得到它像这个

string selectedColumnHeader = (string)myGrid.SelectedCells[0].Column.Header;

如果你的意思是细胞价值,你可以得到它像这个

DataRowView dataRow = (DataRowView)dataGrid1.SelectedItem;
int index = datagrid1.CurrentCell.Column.DisplayIndex;
string cellValue= dataRow.Row.ItemArray[index].ToString();

您可以在selectionChanged、上执行此操作

 private void peopleGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
         var selectedObj= peopleGrid.SelectedItem as YourObject;
         if(selectedObj != null)
         {
         int PersonID   = selectedObj.PersonID;
         }
  }

以下是我如何基于数据网格模板列并使用可编辑列解决相同问题的。

首先是强制转换正在编辑的元素的绑定表达式。接下来,检索显示在单元中的关联特性名称。

<DataGrid Name="dgMaterialSorter" AutoGenerateColumns="False" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
          PreparingCellForEdit="dgMaterialSorter_PreparingCellForEdit" 
          CellEditEnding="dgMaterialSorter_CellEditEnding">
    <DataGrid.Columns>
        <DataGridTextColumn Header="" Binding="{Binding MaterialName}"  IsReadOnly="true" Width="Auto" HeaderStyle="{StaticResource GridHdr_Right}" CellStyle="{StaticResource GridCol_Right}"/>
        <DataGridTextColumn Header="Code" Binding="{Binding MaterialCode}"  IsReadOnly="true" Width="Auto" HeaderStyle="{StaticResource GridHdr_Center}" CellStyle="{StaticResource GridCol_Center}" />
        <DataGridTemplateColumn Header="Qty"  HeaderStyle="{StaticResource GridHdr_Center}" CellStyle="{StaticResource GridCol_Center}"  >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Quantity}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox x:Name="EditTextbox" Text="{Binding Quantity, Mode=TwoWay, UpdateSourceTrigger=LostFocus, ValidatesOnDataErrors=True}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>

private void dgMaterialSorter_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    if (e.EditAction == DataGridEditAction.Commit)
    {
        BindingExpression binding = (BindingExpression)e.EditingElement.BindingGroup.BindingExpressions[0];
        string bindingField = binding.ResolvedSourcePropertyName;
        if (bindingField.Equals(nameof(MaterialSorter.Quantity))) { /*DO SOMETHING*/ }
    }
}