@Dant3lion

WPF ComboBox Как вывести список значений второго ComboBox,чтобы он зависил от выбранного значения в первом ComboBox?

Учусь создавать программы на платформе WPF, и в целях задания необходимо, чтобы после выбора значения в первом ComboBox, во втором ComboBox высветились для выбора только те значения, которые соответствуют первому выбору.

Вот код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Navigation;
using GTO_KST.Classes;

namespace GTO_KST
{
    /// <summary>
    /// Логика взаимодействия для AddResults.xaml
    /// </summary>
    public partial class AddResults : Window
    {
        GTOBase db = new GTOBase();
        public AddResults()
        {
            InitializeComponent();
            GroupCB.ItemsSource = db.Group.ToList();
            
        }

        private void Exit(object sender, MouseButtonEventArgs e)
        {
            MainPages.MainWindow a = new MainPages.MainWindow();
            a.Show();
            Close();
        }

        private void GroupCB_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var d = (GroupCB.SelectedItem as Group).ID_group.ToString();
        }

        private void StudentCB_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var st = (StudentCB.SelectedItem as student).ID_student.ToString();
        }



        private void StudentCB_MouseEnter(object sender, MouseEventArgs e)
        {
            StudentCB.ItemsSource = DbConnect.dbmodel.student.Where(x => x.ID_group == (GroupCB.SelectedItem as Group).ID_group).ToList();
        }
    }
}


Вот как вышлядит использованные здесь части модели из бд.
64066a387890e858822636.png

Подскажите, в чём проблема, так как на функции наведения программа сбоит с сообщением:
"Не удалось создать константу с типом "System.Object". В этом контексте поддерживаются только типы-примитивы и типы перечисления."
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
@OwDafuq
Нет информации о том, как делаете, поэтому скажу, как я делал используя MVVM:
1) При изменении (SelectedItem) выбранного объекта в ComboBox вызывал асинхронный метод загрузки для второго ComboBox
2) В асинхронном методе очищаем ObservableCollection, заполняем его новыми данными из БД/API/etc.

Примерный код был такой:
ViewModel:
private ServerGroup selectedGroup;
public ServerGroup SelectedGroup
{
	get => selectedGroup;
	set
	{
		selectedGroup = value;
		loadProcesses();
	}
}
public ObservableCollection<ServerGroup> Groups { get; }
public ObservableCollection<Process> Processes { get; }

private async void loadProcesses()
{
	Processes.Clear();
	//get response from API, etc.
	var response = new List<Process>(); //example

	response.ForEach(Processes.Add);
}


XAML(View):
<ComboBox SelectedItem="{Binding SelectedGroup}" ItemsSource="{Binding Groups}"/>
<ComboBox SelectedItem="{Binding ......}" ItemsSource="{Binding Processes}"/>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы