Есть 2 Combobox'а, которые прибиндины к 2 ObservableCollection (UnitList - Combobx1, PosList - Combobox2). Как сделать так, чтобы при выборе значения в Combobox1 обновлялся список в Combobox2?
Например, в Combobox1 содержатся такие значения: Бухгалтерия, Отдел кадров, Учебная часть и т.д.
Если пользователь выбирает Бухгалтерию, то в Combobox2 выводятся значения: Гл бух, Ст бух, Бух, Кассир и т.д.
Если пользователь выбирает Отдел кадров, то в Combobox2 выводится: Нач отд кадров, Архивариус и т.д.
Я сделал биндинг для SelectedItem в Combobox1, чтобы при изменении выбранного элемента обновлялся список в Combobox2, но ничего не обновляется. Программа получает новый список для PosList, но в самом Combobox изменения не происходят. Что сделал не так?
XAML:
<Window x:Class="Prac.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Prac"
mc:Ignorable="d"
Title="MainWindow" Height="550" Width="800">
<Grid>
<TextBlock Text="{Binding Path=SomeText}"
FontSize="20"
VerticalAlignment="Top" HorizontalAlignment="Center"
/>
<TextBlock Text="Подразделение"
FontSize="15"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,10"
/>
<ComboBox ItemsSource="{Binding Path=UnitList}"
SelectedItem="{Binding Path=SelectedUnit}"
Width="150"
FontSize="15"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,30"/>
<TextBlock Text="Должность"
FontSize="15"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,60"
/>
<ComboBox ItemsSource="{Binding Path=PosList, Mode=TwoWay}"
SelectedItem="{Binding Path=SelectedPos, UpdateSourceTrigger=PropertyChanged}"
Width="150"
FontSize="15"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,85"/>
<Button Content="Проверить наличие мест"
FontSize="15"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Margin="10,120"
Command="{Binding CheckPlace}"
/>
</Grid>
</Window>
C#:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace Prac
{
public class MainWindowVM:INotifyPropertyChanged
{
public string SomeText { get; set; }
// Список подразделений
public ObservableCollection<string> UnitList { get; set; }
// Список должностей
public ObservableCollection<string> PosList { get; set; }
// Выбранная должность
public string SelectedPos { get; set; }
// Выбранное подразделение
private string selectedUnit = "";
public string SelectedUnit
{
get => selectedUnit;
set
{
selectedUnit = value;
// Загрузка должностей взависимости от названия подразделения
PosList = CollegeCommands.GetPositions(selectedUnit);
}
}
public string SecondName { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string Phone { get; set; }
public string Education { get; set; }
public MainWindowVM()
{
SomeText = "П0ИСК ВАКАНСИЙ ! ! !";
UnitList = CollegeCommands.GetUnits();
SelectedUnit = UnitList[2];
PosList = CollegeCommands.GetPositions(SelectedUnit);
SelectedPos = PosList[0];
}
private ICommand _checkPlace;
public ICommand CheckPlace
{
get
{
return _checkPlace ?? (_checkPlace = new RelayCommand(x =>
{
// проверка доступных мест на выбранныю должность
}));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
При запуске проекта, в Combobox2 загружается правильный список должностей:

Но если изменить подразделение, то значение Combobox2 не меняется, хотя при отладке видно, xnj ghbcdfbdfybt PosList = CollegeCommands.GetPositions(selectedUnit) выполняется:
