Заполнение списка данными из базы данных. Значения из базы данных зависят от выбора элемента комбинированного списка C# WPF MVVM - PullRequest
0 голосов
/ 07 апреля 2020

После выбора значения из моего поля со списком, значения должны быть добавлены в список из базы данных. В моем случае я выбираю школьный класс из поля со списком. Затем в списке должно отобразиться список учеников этого класса (выбранный класс из поля со списком). Школьные классы также из базы данных. Поле со списком заполнено школьными классами, и я заполняю его, используя метод, который я вызываю в конструкторе. Студенты должны отображаться после того, как я нажму на кнопку. Этот щелчок делается в команде, которая связана со свойством команды кнопки. Лог c находится в классе ViewModel, а не в Window.xaml.cs, так как здесь я использую MVVM. Список не заполнен данными из базы данных, вот в чем проблема. Ничего не отображается

Вот мой код из ViewModel:

Свойство команды:

public ICommand SearchCommand
    {
        get
        {
            if (searchCommand == null)
            {
                searchCommand = new RelayCommand(() => searchStudents());
            }
            return searchCommand;
        }
    }

Метод:

public void searchStudents()
    {
        try
        {
            mySqlConnection.Open();
            string query = "SELECT * FROM `studentmanagement-db`.tbl_student WHERE FK_Klasse= @FK_Klasse;";
            MySqlCommand command = new MySqlCommand(query, mySqlConnection);
            command.Parameters.AddWithValue("@FK_Klasse", KlasseProp.KlassenIDFK);
            command.ExecuteNonQuery();
            MySqlDataAdapter sqlDataAdapter = new MySqlDataAdapter(command);
            using (sqlDataAdapter)
            {
                DataTable studentTable = new DataTable();
                sqlDataAdapter.Fill(studentTable);
                var result = studentTable;
                SchuelerProp.Vorname = "Vorname"; 
                SchuelerProp.ItemSource = studentTable.DefaultView;
                SchuelerProp.SchuelerID = "tbl_student_id";
            }

        }
        catch (Exception e)
        {
            MessageBox.Show(e.StackTrace);
        }
        finally
        {
            mySqlConnection.Close();
        }

Вот Привязки от xaml:

 <ComboBox x:Name="Combo_Klassen" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="20,10,10,10" Width="100" Height="25"
                      ItemsSource="{Binding Path=KlasseProp.ItemSource, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                      DisplayMemberPath="{Binding Path=KlasseProp.KlassenNamen}"
                      SelectedValue="{Binding KlasseProp.KlassenIDFK}"
                      SelectedValuePath="{Binding Path=KlasseProp.KlassenID}"
                      >
            </ComboBox>
            <Button x:Name="Button_Search" Content="search" VerticalAlignment="Top" HorizontalAlignment="Right" Width="50" Height="25" Margin="20,10,50,10" VerticalContentAlignment="Center"
                    Command="{Binding Path=SearchCommand}"/>

            <ListBox x:Name="Listbox_Students" Margin="50,100,50,75"
                     ItemsSource="{Binding Path=SchuelerProp.ItemSource, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                     DisplayMemberPath="{Binding Path=SchuelerProp.Vorname}"
                     SelectedValuePath="{Binding Path=SchuelerProp.SchuelerID}"
                     SelectedValue="{Binding Path=SchuelerProp.Schueler_ID}"
                    >
            </ListBox>

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте установить UppdateSourceTrigger на OnPropertyChanged для SelectedValue следующим образом: SelectedValue="{Binding Path=KlasseProp.KlassenIDFK, UpdateSourceTrigger=PropertyChanged}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...