Не удается сделать передачу данных между окнами WPF

Делаю приложение магазин продуктов в 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<int> IdContainer = new ObservableCollection<int>();
        public float SummPrice { get { return SummBasketCalculation(); } set { SummPrice = value; OnPropertyChanged("SummPrice"); } }

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

        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 = $"select Цена from Товар where Код_Товара = '{i}'";
                    SqlCommand command = new SqlCommand(querystring, dataBase.GetConnection());
                    dataBase.openConnection();

                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        summ += Convert.ToInt32(reader["Цена"]);
                    }
                }
                return summ;
            }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.ToString());
                return 0;
            }
            finally
            {
                if (reader != null && !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<int> 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 = $"select Название, Цена, Картинка from Товар where Код_Товара = '{i}'";
                    SqlCommand command = new SqlCommand(querystring, dataBase.GetConnection());
                    dataBase.openConnection();

                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        byte[] imageBytes = (byte[])reader["Картинка"];
                        basketItems.Items.Add(new
                        {
                            ImageItem = ImgFromBytes(imageBytes),
                            TextItem = Convert.ToString(reader["Название"]),
                            PriceItem = Convert.ToString(reader["Цена"]) + "₽"
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                // MessageBox.Show(ex);
            }
            finally
            {
                if (reader != null && !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 шт):