Могу ли я получить текущее значение ячейки сетки данных во время события KeyDown - PullRequest
2 голосов
/ 31 марта 2020

У меня есть событие в сетке данных 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...