0

在我的项目中,我有一个主窗口和两个视图(MainWindowCylinderOneViewHomeView。在我的MainWindowxaml 中,我有两个单选按钮和一个内容控件。选择 contentcontrol 上MainWindow的 radiocontrol 按钮后,将显示HomeViewCylinderOneView。在我想在它们之间传输数据之前,它们都工作得很好。

在我的主视图中,我有一个组合框,并且我在主视图中显示该组合框的选定项目,并且由于我使用 INotifyPropertyChanged,因此标签中的内容按预期更新(在组合框中更改选择时更新)HomeView。现在我想做同样的事情,CylinderOneView但我做不到。我想在组合框中显示所选项目的值,并且如果在组合框中HomeView更改CylinderOneView了选择,我还想更新值HomeView在此处输入图像描述

我的整个结果初始输出看起来像红色矩形内的显示。上半部分是单击 Home Radio Button 时,下半部分是单击 CylinderOne 按钮时。我已经为单选按钮使用了切换按钮模板,所以显示就像单选按钮的显示一样

我的 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;
        }
    }
}

我的 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

4

0 回答 0