0

Делаю приложение магазин продуктов в WPF с SQL. Пытаюсь сделать корзину (есть класс BasketConstructor, в котором есть ObservableCollection, в которую я записываю id товаров и далее их вывожу через запросы. Проблема в том что у меня не получается сделать связку данных между классами. Пытался сделать еще один класс, в котором уже вызывать методы BasketConstructor (у этого класса (DataTransmission) в конструкторе беру объект класса BasketConstructor)). Как сделать связку данных... жду помощи кодом пожалуйста...

BasketConstructor:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using System.Windows;

namespace Practice { internal class BasketConstructor : INotifyPropertyChanged { DataBase dataBase = new DataBase(); public ObservableCollection<int> idContainer { get { return IdContainer; } set { IdContainer = value; OnPropertyChanged("idContainer"); } }

    private ObservableCollection&lt;int&gt; IdContainer = new ObservableCollection&lt;int&gt;();
    public float SummPrice { get { return SummBasketCalculation(); } set { SummPrice = value; OnPropertyChanged(&quot;SummPrice&quot;); } }

    //Сделать кнопку покупки (запись в бд всех товаров и удаление)

    public void AddProduct(int id)
    {
        idContainer.Add(id);

    }

    private int SummBasketCalculation()
    {
        int summ = 0;
        SqlDataReader reader = null;

        try
        {
            foreach (int i in idContainer)
            {
                string querystring = $&quot;select Цена from Товар where Код_Товара = '{i}'&quot;;
                SqlCommand command = new SqlCommand(querystring, dataBase.GetConnection());
                dataBase.openConnection();

                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    summ += Convert.ToInt32(reader[&quot;Цена&quot;]);
                }
            }
            return summ;
        }
        catch (Exception ex)
        {
             MessageBox.Show(ex.ToString());
            return 0;
        }
        finally
        {
            if (reader != null &amp;&amp; !reader.IsClosed)
                reader.Close();

            dataBase.closeConnection();
        }
    }




    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler propertyChangedEvent = PropertyChanged;
        if (propertyChangedEvent != null)
        {
            propertyChangedEvent(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

}

DataTransmission:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice { internal class DataTransmission { BasketConstructor BasketConstructor; public DataTransmission(BasketConstructor basketConstructor) { BasketConstructor = basketConstructor; }

    public void AddProduct(int id)
    {
        BasketConstructor.AddProduct(id);
    }
}

}

Basket:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data.SqlClient;
using System.IO;
using System.Collections.ObjectModel;

namespace Practice { /// <summary> /// Логика взаимодействия для Basket.xaml /// </summary> public partial class Basket : Window { BasketConstructor bconstructor = new BasketConstructor();

    DataBase dataBase = new DataBase();


    ObservableCollection&lt;int&gt; id { get { return bconstructor.idContainer; } }
    public Basket()
    {
        InitializeComponent();
        basketGrid.Background = new SolidColorBrush(Color.FromRgb(223, 229, 229));
        Loaded += Basket_Loaded;
    }

    private void Basket_Loaded(object sender, RoutedEventArgs e)
    {
        SqlDataReader reader = null;

        try
        {
            foreach (int i in bconstructor.idContainer)
            {
                string querystring = $&quot;select Название, Цена, Картинка from Товар where Код_Товара = '{i}'&quot;;
                SqlCommand command = new SqlCommand(querystring, dataBase.GetConnection());
                dataBase.openConnection();

                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    byte[] imageBytes = (byte[])reader[&quot;Картинка&quot;];
                    basketItems.Items.Add(new
                    {
                        ImageItem = ImgFromBytes(imageBytes),
                        TextItem = Convert.ToString(reader[&quot;Название&quot;]),
                        PriceItem = Convert.ToString(reader[&quot;Цена&quot;]) + &quot;₽&quot;
                    });
                }
            }
        }
        catch (Exception ex)
        {
            // MessageBox.Show(ex);
        }
        finally
        {
            if (reader != null &amp;&amp; !reader.IsClosed)
                reader.Close();
            dataBase.closeConnection();
        }


        //basketItems.ItemsSource = new[] { new и тд}
    }

    private static BitmapImage ImgFromBytes(byte[] arr)
    {
        var image = new BitmapImage();

        using (var mem = new MemoryStream(arr))
        {
            mem.Position = 0;
            image.BeginInit();
            image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
            image.CacheOption = BitmapCacheOption.OnLoad;
            image.UriSource = null;
            image.StreamSource = mem;
            image.EndInit();
        }
        image.Freeze();

        return image;
    }

    private void Back_Button_Click(object sender, RoutedEventArgs e)
    {
        UserPage userPage = new UserPage();
        userPage.Show();
        Close();
    }
}

}

Сама запись в ObservableCollection:

  private void One_Bread_Click(object sender, RoutedEventArgs e)
        {
            DataTransmission dataTransmission = new DataTransmission(bconstruct);
            dataTransmission.AddProduct(1);
        }

0 Answers0