Выбор первой строки сетки данных при загрузке формы WPF

#c# #wpf

#c# #wpf

Вопрос:

В окне WPF у меня есть текстовое поле, привязанное к сетке данных, уже заполненное данными. Когда я выбираю другую строку, текст в текстовом поле изменяется правильно. Однако при загрузке WPF сначала выбор отсутствует, поэтому текстовое поле остается пустым. Привязка к текстовому полю происходит только тогда, когда я действительно выбираю строку.

Как я могу добиться того, чтобы при загрузке формы автоматически выбиралась первая строка сетки данных, и поэтому текстовое поле заполнялось.

Вот как я привязываю текстовое поле к сетке данных (XAML):

 <TextBox x:Name="txtContactNaam" Grid.Column="1" Grid.Row="11" Grid.ColumnSpan="1" Margin="10,10,10,10" Text  = "{Binding ElementName = dgContacten, Path = SelectedItem.[Naam], 
     Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}" ></TextBox>
 

Спасибо за вашу помощь.

Немного больше кода:

 public partial class wpfTest_2 : Window
 

{
DataTable dtContacten;

 DataSet dsContacten = new DataSet("Contacten");

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    MaakTabellen();
    VulTabellen();

    dgContacten.ItemsSource = dtContacten.DefaultView;
}

private void MaakTabellen()
{
    dtContacten = new DataTable("Contacten");
    dsContacten.Tables.Add(dtContacten);

    dtContacten.Columns.Add("Naam", typeof(string));
    dtContacten.Columns.Add("Voornaam", typeof(string));
}

private void VulTabellen()
{
    ToevoegenDataContacten("Vanderbeke", "Michel");
    ToevoegenDataContacten("Maes", "Maddy");
    ToevoegenDataContacten("Pieters", "Jan");
}

private void ToevoegenDataContacten(string naam, string voornaam)
{
    DataRow nieuwContact = dsContacten.Tables["Contacten"].NewRow();

    nieuwContact["Naam"] = naam;
    nieuwContact["Voornaam"] = voornaam;

    dsContacten.Tables["Contacten"].Rows.Add(nieuwContact);
}
 

}

 <DataGrid x:Name="dgContacten" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="6" Grid.RowSpan="10" Margin="10,10,10,10" RowBackground="LightYellow" AlternatingRowBackground="LightBlue" ItemsSource="{Binding Table}" 
                 SelectedItem="{Binding Row, Mode=TwoWay}"></DataGrid>

<TextBox x:Name="txtContactNaam" Grid.Column="1" Grid.Row="11" Grid.ColumnSpan="1" Margin="10,10,10,10" Text  = "{Binding ElementName = dgContacten, Path = SelectedItem.[Naam], 
     Mode = TwoWay, UpdateSourceTrigger =PropertyChanged}" ></TextBox>
    <TextBox x:Name="txtContactVoornaam" Grid.Column="1" Grid.Row="12" Grid.ColumnSpan="1" Margin="10,10,10,10" Text  = "{Binding ElementName = dgContacten, Path = SelectedItem.[Voornaam],
     Mode = TwoWay, UpdateSourceTrigger = PropertyChanged}"></TextBox>
 

Надеюсь, это прояснит мою проблему.

Комментарии:

1. пожалуйста, добавьте DataGrid xaml и код, который заполняет данные

Ответ №1:

вы можете установить выбранную строку после назначения ItemsSource:

 dgContacten.ItemsSource = dtContacten.DefaultView;
dgContacten.SelectedIndex = 0;
 

кстати, следующие привязки ничего не делают:

 ItemsSource="{Binding Table}" 
SelectedItem="{Binding Row, Mode=TwoWay}"
 

потому что

  • вы сбрасываете ItemsSource в коде
  • вы не назначаете DataContext
  • таблица свойств и строка не существуют

Комментарии:

1. Да, я уже пробовал dgContacten. SelectedIndex = 0;

2. Да, я уже пробовал dgContacten. SelectedIndex = 0; но это не помогло выбрать первую строку DataGrid при загрузке формы. Мне все еще нужно щелкнуть по строке, чтобы данные отображались в текстовых полях. Упомянутые вами привязки я уже удалил из своего XAML-кода. Остается вопрос: как я могу автоматически выбрать строку после form_load?