Не загружаются данные коллекции в 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 В чём может быть проблема? Почему не происходит привязка данных к ComboBox? Или она происходит, но наименования материалов просто не отображаются?


Ответы (0 шт):