Объект класса 1 как свойство другого класса (класс 2).Как уведомить об изменении собственности - PullRequest
0 голосов
/ 30 ноября 2018

В моем проекте у меня есть одно главное окно и два вида (MainWindow, CylinderOneView и HomeView). В моем MainWindow xaml у меня есть две радиокнопки и управление контентом.При выборе кнопки радиоуправления на MainWindow контентный контроль покажет либо HomeView, либо CylinderOneView.Они оба прекрасно работают, пока я не хочу передавать данные между ними.

На моем домашнем экране у меня есть поле со списком и выбранный элемент этого списка, который я отображаю на домашнем экране, и так как яс помощью INotifyPropertyChanged содержимое в метке обновляется, как ожидается (обновления, когда выбор изменяется в выпадающем списке) в этом HomeView.Теперь я хотел сделать то же самое в CylinderOneView, но я не могу это сделать.Я хочу отобразить значение выбранного элемента в выпадающем списке HomeView до CylinderOneView, а также хочу обновить значение, если выбор был изменен в HomeView Combobox.enter image description here

Весь мой исходный вывод выглядит как отображение внутри красного прямоугольника.Верхняя часть - когда нажата кнопка 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

...