简体   繁体   English

在 C# wpf 中访问 DataGrid 的编辑单元格

[英]Access Editing Cell of DataGrid in C# wpf

I made a Datagrid with XAML:我用 XAML 制作了一个 Datagrid:

<DataGrid Name="dataGridBlockRow" Width="Auto" AutoGenerateColumns="False" VirtualizingStackPanel.IsVirtualizing="False" 
  CanUserReorderColumns="False" CanUserAddRows="false" CanUserDeleteRows="false" VerticalScrollBarVisibility="Visible"
  BeginningEdit="dataGridBlockRow_BeginningEdit"
  LoadingRow="gridColumns_LoadingRow" Grid.Column="1" Grid.Row="2">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Row Number" MinWidth="120" Width="1*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Margin="0" Text="{Binding Path=RowNumber}">
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <toolkit:UIntegerUpDown Name="InputNumber" Value="{Binding Path=RowNumber, Mode=TwoWay}" AllowTextInput="False">
                    </toolkit:UIntegerUpDown>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Tree Count" MinWidth="120" Width="1*">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Margin="0" Text="{Binding Path=TreeCount}">
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <toolkit:UIntegerUpDown Name="inputTree" Value="{Binding Path=TreeCount, Mode=TwoWay}">
                    </toolkit:UIntegerUpDown>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

在此处输入图像描述


in c# code I added a List to my DataGrid: 在 c# 代码中,我向我的 DataGrid 添加了一个列表:
 List<BlockRow> blockRowList = new List<BlockRow>(); dataGridBlockRow.ItemsSource = blockRowList;

I want to Access the input control InputNumber and InputTree .我想访问输入控件InputNumberInputTree How can I access the current Editing Cell Input TextBox?如何访问当前的编辑单元格输入文本框?

In WPF better to avoid change controls inside DataTemplate.在 WPF 中最好避免在 DataTemplate 中更改控件。
But if you want to get reference you can use FindName method of dataTemplate.但是如果你想获得参考,你可以使用 dataTemplate 的 FindName 方法。

public static Control GetControlFromCellEditingTemplate(this DataGridColumn column, string controlName)
{
   DataTemplate template = column.CellEditingTemplate;   
   return template.FindName(controlName, column);
} 

you can use it like你可以像这样使用它

var inputNumberUpDown = ((DataGridColumn)dataGridBlockRow.Columns[0]).GetControlFromCellEditingTemplate("InputNumber") as UIntegerUpDown;
var inputTreeUpDown = ((DataGridColumn)dataGridBlockRow.Columns[1]).GetControlFromCellEditingTemplate("inputTree") as UIntegerUpDown;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM