В моем проекте у меня есть одно главное окно и два вида (MainWindow
, CylinderOneView
и HomeView
). В моем MainWindow
xaml у меня есть две радиокнопки и управление контентом.При выборе кнопки радиоуправления на MainWindow
контентный контроль покажет либо HomeView
, либо CylinderOneView
.Они оба прекрасно работают, пока я не хочу передавать данные между ними.
На моем домашнем экране у меня есть поле со списком и выбранный элемент этого списка, который я отображаю на домашнем экране, и так как яс помощью INotifyPropertyChanged содержимое в метке обновляется, как ожидается (обновления, когда выбор изменяется в выпадающем списке) в этом HomeView
.Теперь я хотел сделать то же самое в CylinderOneView
, но я не могу это сделать.Я хочу отобразить значение выбранного элемента в выпадающем списке HomeView
до CylinderOneView
, а также хочу обновить значение, если выбор был изменен в HomeView
Combobox.
Весь мой исходный вывод выглядит как отображение внутри красного прямоугольника.Верхняя часть - когда нажата кнопка Home Radio, а нижняя часть - когда нажата кнопка CylinderOne. Я использовал шаблон кнопки-переключателя для переключателя, поэтому отображение аналогично переключателю
Мой цилиндрOneView.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;
}
}
}
Я загрузил свой полный код в Github и ниже ссылка github https://github.com/mechbaral/ComboBoxSelection