WPF ComboBox binding ObservableCollection
Есть WPF проект. В нём имеется ListBox, к нему прибинден ObservableCollection Units, внутри которого по нажатию кнопки создаётся Expander со всякими элементами, а также ComboBox. ComboBox представлен в виде ObservableCollection с именем UnitTypes + со своим типом UnitType. Коллекция заполняется элементами в DataContext. Коллекция и её тип лежат в отдельных классах от MainWindow (UnitTypes лежит в классе Main_prop).
Суть проблемы состоит в том, что не получается нормально прибиндить ComboBox к коллекции UnitTypes. Т.е. добавление элементов в в коллекцию происходит успешно, однако ComboBox остаётся пустым.
Что я делаю не так? Как можно решить данную проблему?
Также хочу отметить что я недавно начал изучать WPF, поэтому могу не знать некоторых вещей.
Xaml
<ListBox x:Name="LBUnits" ItemsSource="{Binding Units}">
<ListBox.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding NameU}" >
<StackPanel>
<TextBlock Text="Название"/>
<TextBox Text="{Binding NameU}"/>
<TextBlock Text="Описание"/>
<TextBox Text="{Binding DescU}"/>
<TextBlock Text="Тип"/>
<ComboBox ItemsSource="{Binding UnitTypes}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding UTypeName}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Expander>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Добавить" Click="AddUnit"/>
Коллекция UnitTypes, лежащая в Main_prop.
public ObservableCollection<UnitType> UnitTypes
{
get { return _UnitTypes; }
set { _UnitTypes = value; OnPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName]string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
UnitType
public class UnitType
{
public int idUnitType { get; set; }
public string UTypeName { get; set; }
public UnitType(int _idUnitType, string _UTypeName)
{
this.idUnitType = _idUnitType;
this.UTypeName = _UTypeName;
}
}
MainWindow
private Main_prop mnp;
public MainWindow()
{
InitializeComponent();
mnp = new Main_prop();
DataContext = mnp;
mnp.UnitTypes = new ObservableCollection<UnitType>();
mnp.UnitTypes.Add(new UnitType(0, "тест0"));
mnp.UnitTypes.Add(new UnitType(1, "тест1"));
}
Main_prop _MAINpr = new Main_prop();
Метод создания новых элементов в ListBox (MainWindow)
private void AddUnit(object sender, RoutedEventArgs e)
{
_MAINpr.Units.Add(new Unit() { NameU = "имя тест", DescU = "описание тест", idUnitType = 0, UnitCost = 0, UnitTotalCost = 0, UnitPrice = 0 });
LBUnits.ItemsSource = null;
LBUnits.ItemsSource = _MAINpr.Units;
}
P.S коллекция Units, которая используется в ListBox.
public ObservableCollection<Unit> Units = new ObservableCollection<Unit>();
public class Unit
{
public string NameU { get; set; }
public int idUnitType { get; set; }
public string DescU { get; set; }
public int UnitCost { get; set; }
public int UnitTotalCost { get; set; }
public int UnitPrice { get; set; }
}