У меня есть событие в сетке данных KeyDown. Но я не могу узнать текущее значение из обновленной ячейки. Мне нужно знать значение для каждого измененного символа.
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>
Редактировать:
public partial class MainWindow : Window
{
List<Person> person = new List<Person>();
public MainWindow()
{
InitializeComponent();
person.Add(new Person() { Name = "Abb", SecondName = "AA" });
person.Add(new Person() { Name = "Bbb", SecondName = "BB" });
person.Add(new Person() { Name = "Ccc", SecondName = "CC" });
DataGrid1.ItemsSource = person;
}
private void WordsDataGrid_KeyDown(object sender, KeyEventArgs e)
{
}
}
public class Person
{
public string Name { get; set; }
public string SecondName { get; set; }
public int Age { get; set; }
}
Xaml:
<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>