Не загружаются данные коллекции в ComboBox, WPF C#
Делаю WPF приложение для управления производством на предприятии. В БД есть таблица материалов и таблица деталей, которые изготавливаются из материалов. Одна деталь может изготавливаться из нескольких материалов, поэтому при добавлении новой детали используется DataGrid для возможности ввода нескольких материалов и их количества. В первой колонке DataGrid необходимо сделать так, чтобы пользователь выбирал материал из ComboBox, где происходит подгрузка данных из таблицы материалов, а во второй вводил количество этого материала. Выглядит это так: В XAML эта форма выглядит следующим образом:
<StackPanel Grid.Row="1" Grid.ColumnSpan="3" Margin="10" Visibility="Collapsed" x:Name="AddDetailForm">
<Label Content="Наименование детали" HorizontalAlignment="Center" Margin="5"/>
<TextBox x:Name="detailNameTextBox" HorizontalAlignment="Center" Margin="5" Padding="5" Width="300"/>
<Label Content="Необходимые материалы" HorizontalAlignment="Center" Margin="5"/>
<DataGrid x:Name="materialsForDetailDataGrid" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" Margin="5" Width="500" Grid.Row="1">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Наименование материала" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.Materials, RelativeSource={RelativeSource AncestorType=Window}}"
DisplayMemberPath="Name"
SelectedValue="{Binding MaterialId, Mode=TwoWay}"
SelectedValuePath="Id"
SelectedIndex="-1" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Количество" Binding="{Binding Count, Mode=TwoWay}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<Button Content="Добавить деталь" Margin="10" Padding="10" Width="150" Height="20" HorizontalAlignment="Center" Background="#4CAF50" Foreground="White" BorderBrush="{x:Null}" BorderThickness="0" Click="SaveDetail_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="5">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#45A049"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="#3E8E41"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
В коде для привязки данных, соответственно создал коллекцию материалов Materials и заполнил её данными:
public partial class MainWindow : Window
{
private static readonly HttpClient client = new HttpClient();
private AppDbContext _context;
private Material _selectedMaterial;
private readonly UnitManager _unitManager;
private readonly MaterialManager _materialManager;
private readonly StorageManager _storageManager;
private readonly DetailManager _detailManager;
private readonly DetailsMaterialManager _detailsMaterialManager;
private ObservableCollection<Material> Materials { get; set; }
private ObservableCollection<Unit> Units { get; set; }
public ObservableCollection<MaterialQuantityViewModel> MaterialQuantities { get; set; }
public MainWindow()
{
InitializeComponent();
var dbContext = new AppDbContext();
_unitManager = new UnitManager(dbContext);
_materialManager = new MaterialManager(dbContext);
_storageManager = new StorageManager(dbContext);
_detailManager = new DetailManager(dbContext);
_detailsMaterialManager = new DetailsMaterialManager(dbContext);
Materials = new ObservableCollection<Material>();
Units = new ObservableCollection<Unit>();
MaterialQuantities = new ObservableCollection<MaterialQuantityViewModel>();
// Загрузка данных
LoadMaterials();
LoadUnits();
LoadStorage();
LoadDetails();
// Установка DataContext окна
DataContext = this;
materialsForDetailDataGrid.ItemsSource = MaterialQuantities;
}
private void LoadMaterials()
{
var materials = _materialManager.GetAllMaterials();
materialsDataGrid.ItemsSource = materials;
Materials.Clear();
foreach (var material in materials)
{
Materials.Add(material);
}
}
//Остальные методы...
Вот модель данных Material
public class Material
{
public int Id { get; set; }
public string Name { get; set; }
public int UnitId { get; set; }
public Unit Unit { get; set; }
}
Но при попытке развернуть ComboBox, он оказывается пустым В чём может быть проблема? Почему не происходит привязка данных к ComboBox? Или она происходит, но наименования материалов просто не отображаются?