在我的项目中,我有一个主窗口和两个视图(MainWindow
和CylinderOneView
)HomeView
。在我的MainWindow
xaml 中,我有两个单选按钮和一个内容控件。选择 contentcontrol 上MainWindow
的 radiocontrol 按钮后,将显示HomeView
或 CylinderOneView
。在我想在它们之间传输数据之前,它们都工作得很好。
在我的主视图中,我有一个组合框,并且我在主视图中显示该组合框的选定项目,并且由于我使用 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