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 HomeView
or 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.
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