Добавление значений из ComboBox в DataGrid в WPF

У меня есть 4 поля со списком, каждое из которых помечено в раскрывающемся меню. После этого в своем коде я хочу настроить оператор if else для ComboBox. если элемент выбран, он добавляется в DataGrid на основе определенных значений (стоимость, тип элемента и имя элемента).

XAML ComboBox (сокращенно для этого вопроса)

<TextBlock>Electronics:</TextBlock>
            
            <ComboBox>
                <ComboBoxItem x:Name = "cmbxElectronics">
                    <TextBlock x:Name = "txtLaptop">Laptop</TextBlock>
                </ComboBoxItem>
                <ComboBoxItem>
                    <TextBlock x:Name = "txtPC">PC</TextBlock>
                </ComboBoxItem>
                <ComboBoxItem>
                    <TextBlock x:Name = "txtStove">Stove</TextBlock>
                </ComboBoxItem>
                <ComboBoxItem>
                    <TextBlock x:Name = "txtCamera">Camera</TextBlock>
                </ComboBoxItem>
            </ComboBox>

Вот код XAML Data Grid:

<StackPanel Grid.Row = "0" Grid.Column = "1" Margin = "5">
            <DataGrid Margin = "5" Height = "195">
                <DataGrid.Columns>
                    <DataGridTextColumn Header = " Item" Width = "*" />
                    <DataGridTextColumn Header = " Type" Width = "*"/>
                    <DataGridTextColumn Header = " Cost($)" Width = "*"/>    
                </DataGrid.Columns>

                <DataGrid.Resources>
                    <Style TargetType = "{x:Type DataGridColumnHeader}">
                        <Setter Property = "Background" Value = "#3280fc"/>
                        <Setter Property = "FontWeight" Value = "SemiBold"/>
                        <Setter Property = "BorderThickness" Value = "0,0,1,2"/>
                        <Setter Property = "BorderBrush" Value = "Black"/>
                        
                    </Style>
                           
                </DataGrid.Resources>

            </DataGrid>

        </StackPanel>

Наконец, вот код в файле cs, который создает класс для DataGrid (счет-фактура) и метод для расчета итогов (просто хочу знать, как установить ComboBox в DataGrid):

private class Invoice
        {
            public string Item { get; set; }
            public string Type { get; set; }
            public double Price { get; set; }

        }

        private void Calculate()
        {
            double price = 0;
            const double HST = 0.18;

            if (cmbxElectronics.IsSelected)
            {
                
            }

            
        }

Как только я выясню это для одного из них, остальные должны быть простыми. Дайте мне знать, если требуется дополнительная информация, спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В основном обратите внимание на привязку:

<DataGrid x:Name = "DataGridInvoices" ItemsSource = "{Binding}"  Height = "236" Width = "636" AutoGenerateColumns = "False" CanUserAddRows = "False" >

                <DataGrid.Columns >
                    <DataGridTextColumn Header = " Item" Width = "*"  Binding = "{Binding Item}"/>
                    <DataGridTextColumn Header = " Type" Width = "*"  Binding = "{Binding Type}"/>
                    <DataGridTextColumn Header = " Cost($)" Width = "*" Binding = "{Binding Price}"/>
                </DataGrid.Columns>

Удалить повторяющиеся столбцы и удалить последнюю пустую строку:

AutoGenerateColumns = "False" CanUserAddRows = "False"

Xaml:

<Window x:Class = "WpfApp5.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:WpfApp5"
        mc:Ignorable = "d"
        Title = "MainWindow" Height = "450" Width = "800">
    <Grid>
        <TextBlock>Electronics:</TextBlock>

        <StackPanel Grid.Row = "0" Grid.Column = "1" Margin = "5">
            <DataGrid x:Name = "DataGridInvoices" ItemsSource = "{Binding}"  Height = "236" Width = "636" AutoGenerateColumns = "False" CanUserAddRows = "False" >

                <DataGrid.Columns >
                    <DataGridTextColumn Header = " Item" Width = "*"  Binding = "{Binding Item}"/>
                    <DataGridTextColumn Header = " Type" Width = "*"  Binding = "{Binding Type}"/>
                    <DataGridTextColumn Header = " Cost($)" Width = "*" Binding = "{Binding Price}"/>
                </DataGrid.Columns>

                <DataGrid.Resources>
                    <Style TargetType = "{x:Type DataGridColumnHeader}">
                        <Setter Property = "Background" Value = "#3280fc"/>
                        <Setter Property = "FontWeight" Value = "SemiBold"/>
                        <Setter Property = "BorderThickness" Value = "0,0,1,2"/>
                        <Setter Property = "BorderBrush" Value = "Black"/>

                    </Style>
                </DataGrid.Resources>
            </DataGrid>

        </StackPanel>

        <ComboBox x:Name = "ComboBox1" HorizontalAlignment = "Left" Margin = "298,300,0,0" VerticalAlignment = "Top" Width = "120" SelectionChanged = "ComboBox1_SelectionChanged">
            <ComboBoxItem Content = "Laptop"/>
            <ComboBoxItem Content = "PC"/>
            <ComboBoxItem Content = "Stove"/>
            <ComboBoxItem Content = "Camera"/>
        </ComboBox>
    </Grid>
</Window>

Код:

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;

namespace WpfApp5
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Invoice invoice;
        List<Invoice> Laptop = new List<Invoice>()
            {
                new Invoice(){Item  = "0",Type = "A",Price=10000},
                new Invoice(){Item  = "1",Type = "B",Price=20000},
                new Invoice(){Item  = "2",Type = "A",Price=15000},
            };
        public MainWindow()
        {
            InitializeComponent();
        }
        private class Invoice
        {
            public string Item { get; set; }
            public string Type { get; set; }
            public double Price { get; set; }
        }

        private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //Intercept the selected name
            string sel = ComboBox1.SelectedItem.ToString();
            string Rsel = sel.Substring(sel.IndexOf(" ") + 1);
            if (Rsel == "Laptop")
            {
                DataGridInvoices.ItemsSource = Laptop;
            }
        }
    }

}

Другие вопросы по теме