Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否能够在KeyDown事件期间获取数据网格单元的当前值_C#_Wpf - Fatal编程技术网

C# 我是否能够在KeyDown事件期间获取数据网格单元的当前值

C# 我是否能够在KeyDown事件期间获取数据网格单元的当前值,c#,wpf,C#,Wpf,我在数据网格键控中有一个事件。但我无法从更新的单元格中获取当前值。我需要知道每个字符的值 if (DataGrid1.SelectedIndex == -1 || e.Key == Key.Enter || e.Key == Key.Tab || e.Key == Key.Escape) return; var thisValueIsNull = DataGrid1.CurrentCell.Item as Person; var thisValueIsBeforeStartUpdate

我在数据网格键控中有一个事件。但我无法从更新的单元格中获取当前值。我需要知道每个字符的值

if (DataGrid1.SelectedIndex == -1 || e.Key == Key.Enter || e.Key == Key.Tab || e.Key == Key.Escape)
    return;
var thisValueIsNull = DataGrid1.CurrentCell.Item as Person;
var thisValueIsBeforeStartUpdate = DataGrid1.SelectedItem as Person;
我应该怎么做才能得到这个值

代码xmal:

<DataGrid x:Name="DataGrid1" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
              AutoGenerateColumns="False" Grid.RowSpan="2" CanUserAddRows="False" LayoutUpdated="DataGrid1_LayoutUpdated" RowHeaderWidth="0" KeyDown="DataGrid1_KeyDown">
        <DataGrid.Columns>

            <DataGridTextColumn x:Name="column1" Header="Name" Binding="{Binding Name}" Width="*"/>
            <DataGridTextColumn x:Name="column2" Header="SecondName" Binding="{Binding SecondName}" Width="*"/>
            <DataGridTextColumn x:Name="column3" Header="Age" Binding="{Binding Age}" Width="*"/>
            <DataGridTextColumn x:Name="column4" Header="Country" Binding="{Binding Country}" Width="*"/>
            <DataGridTextColumn x:Name="column5" Header="City" Binding="{Binding City}" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>

编辑:

公共部分类主窗口:窗口
{
列表人员=新列表();
公共主窗口()
{
初始化组件();
添加(newperson(){Name=“Abb”,SecondName=“AA”});
添加(newperson(){Name=“Bbb”,SecondName=“BB”});
添加(newperson(){Name=“Ccc”,SecondName=“CC”});
DataGrid1.ItemsSource=个人;
}
私有void WordsDataGrid\u键向下(对象发送方,KeyEventArgs e)
{
}
}
公共阶层人士
{
公共字符串名称{get;set;}
公共字符串SecondName{get;set;}
公共整数{get;set;}
}
Xaml:


在“编辑”中,您可以将此代码添加到程序中。它可以是其他事件,允许我在每次更改后获取当前值,而无需单击“输入”或更改焦点

解决方案:

 <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Name}" KeyUp="TextBox_KeyUp"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>


您可以添加XAML部分以及完整的事件方法吗?我添加了ofc,但它没有什么特别之处。好的,我猜事件代码在代码后面,对吗?问题可能是将
DataGrid1.CurrentCell.Item用作Person
DataGrid1.CurrentCell.Item
不是
Person
类的实例,这会导致值为null。如果您在该行进行调试,我想您可以在
DataGrid1.CurrentCell.Item
变量中看到正确的值,对吗?我正在寻找如何获取该值。我添加了我正在尝试的内容和结果。我想在不更改inotifypropertychanged的情况下执行此操作,但可能不是。是的,您可以在不更改背后代码中的inotifypropertychanged的情况下执行此操作,但我猜您的datagrid项包含字符串。因此,不要将
用作Person
,这会尝试将项目强制转换为
Person
类型,如果不可能,则结果为
null
<DataGrid x:Name="DataGrid1" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
              AutoGenerateColumns="False" Grid.RowSpan="2" CanUserAddRows="False" RowHeaderWidth="0" KeyDown="WordsDataGrid_KeyDown">
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="column1" Header="Name" Binding="{Binding Name}" Width="*"/>
        <DataGridTextColumn x:Name="column2" Header="SecondName" Binding="{Binding SecondName}" Width="*"/>
            <DataGridTextColumn x:Name="column3" Header="Age" Binding="{Binding Age}" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>
 <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"></TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Name}" KeyUp="TextBox_KeyUp"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>