0

In my project I have one main window and two view(MainWindow, CylinderOneView and HomeView) In my MainWindow xaml I have two radio button and a contentcontrol. Upon selection of radiocontrol button on MainWindow the contentcontrol will show either HomeViewor CylinderOneView. Both of them are working great until i want to transfer the data in between them.

In my home view I have a combobox and the selected item of that combobox i am displaying in the home view such and since i am using INotifyPropertyChanged the content in the label updates as expected(updates when selection is changed in combobox) in this HomeView. Now i wanted to do the same in CylinderOneView but i am unable to do it. I want to display the value of selected item in the combobox of HomeView to the CylinderOneView and also wants to update value if the selection is changed in HomeView Combobox. enter image description here

My whole outcome initial output looks like the display inside the red rectangle. The upper part is when Home Radio Button is Clicked and the down one is when CylinderOne button is clicked. I have used toggle button template for radio button so the display is like that for radio button

My cylinderOneView.xaml.cs

namespace RadioButtonandContentControl
{
    /// <summary>
    /// Interaction logic for CylinderOneView.xaml
    /// </summary>
    public partial class CylinderOneView : UserControl,INotifyPropertyChanged
    {
        private HomeView _ObjectOfHomeView;

        public HomeView ObjectOfHomeView
        {
            get { return _ObjectOfHomeView; }
            set
            {
                if (_ObjectOfHomeView == value)
                    return;
                _ObjectOfHomeView = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ObjectOfHomeView)));
            }
        }

        private string _SelectedItemInCombobox="Null";

        public event PropertyChangedEventHandler PropertyChanged;

        public string SelectedItemInCombobox
        {
            get { return _SelectedItemInCombobox; }
            set
            {
                if (_SelectedItemInCombobox == value)
                    return;
                _SelectedItemInCombobox = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedItemInCombobox)));
            }
        }

        public CylinderOneView()
        {
            ObjectOfHomeView = new HomeView();
            InitializeComponent();
            SelectedItemInCombobox = ObjectOfHomeView.SelectedItem;
        }
    }
}

HomeView.xaml.cs

namespace RadioButtonandContentControl
{  
    /// <summary>
    /// Interaction logic for MainView.xaml
    /// </summary>
    public partial class HomeView : UserControl,INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private string _SelectedItem;

        public string SelectedItem
        {
            get { return _SelectedItem; }
            set
            {
                if (_SelectedItem == value)
                    return;
                _SelectedItem = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedItem)));
            }
        }

        private List<string> _ListofItems;

        public List<string> ListofItems
        {
            get { return _ListofItems; }
            set
            {
                if (_ListofItems == value)
                    return;
                _ListofItems = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ListofItems)));
            }
        }

        public HomeView()
        {
            InitializeComponent();
            this.DataContext = this;
            ListofItems = new List<string>();
            ListofItems.Add("Apple");
            ListofItems.Add("Orange");
            ListofItems.Add("Mango");
            ListofItems.Add("Watermelon");
            ListofItems.Add("Banana");

            //SelectedItem = MyComboBox.SelectedItem as string;


            MyComboBox.SelectionChanged += PropertyAssignMethod;
        }

        public void PropertyAssignMethod(object sender, SelectionChangedEventArgs e)
        {
            SelectedItem = this.MyComboBox.SelectedItem as string;
        }
    }
}

My MainWindow.xaml.cs

namespace RadioButtonandContentControl
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window,INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private HomeView _HomeView;
        private CylinderOneView _CylinderOne;
        public CylinderOneView CylinderOne
        {
            get { return _CylinderOne; }
            set
            {
                if (_CylinderOne == value)
                    return;
                _CylinderOne = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CylinderOne)));
            }
        }
        public MainWindow()
        {

            _HomeView = new HomeView();
            CylinderOne = new CylinderOneView();
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            HomeClicked(sender, e);
        }
        private void HomeClicked(object sender, RoutedEventArgs e)
        {
            DataContext = _HomeView;
        }
        private void CyinderOneClicked(object sender, RoutedEventArgs e)
        {
            DataContext = CylinderOne;
        }
    }
}

I uploaded my full code in Github and below is the link of github https://github.com/mechbaral/ComboBoxSelection

Clemens
  • 123,504
  • 12
  • 155
  • 268
mechbaral
  • 103
  • 7
  • Please don't use code snippets. They don't work for C# or XAML. Just indent your code by 4 blanks. – Clemens Nov 30 '18 at 09:07
  • 2
    All the properties should be dependency properties. You wouldn't need to implemen INotifyPropertyChanged, and they would be bindable. – Clemens Nov 30 '18 at 09:10
  • Next time i wont use code snippets for C# or XAML, thank you. I thought making all property INotify would have helped but seems like it does not. I will go through dependency properties too. Thank you for your suggestion :) – mechbaral Nov 30 '18 at 09:15

0 Answers0