如何获取绑定到wpf中datagrid列的属性的名称
本文关键字:datagrid 属性 wpf 何获取 获取 绑定 | 更新日期: 2023-09-27 18:26:02
我有一个几乎有30列的数据网格,我需要获得绑定到列的属性的名称。我正在使用数据网格的datagrid_selectedcellschanged(sender,selectedeventargs)事件。
我不确定属性名称-列标题或单元格值是什么意思
如果你的意思是列标题,你可以得到它像这个
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*/ }
}
}