c# - 从另一个类调用实例化方法
问题描述
在 MainWindow 中,我有一个名为 jack 的人的实例,通过调用 increaseElevation 方法,我增加了 Jacks 的海拔高度。
在 NewWindow 中,我有一个名为 jill 的人的实例,通过调用 increaseElevation 方法,我可以增加 jills 的高度。
从 NewWindow 如何调用 jack?IncreaseElevation 以便在 MainWindow 中增加 jacks Elevation 的值
我确定我遗漏了一些明显的东西。
public class Person: INotifyPropertyChanged
{
private int _elevation;
public string Name { get; set; }
public int Elevation
{
get { return _elevation; }
set
{
_elevation = value;
OnPropertyChanged("Elevation");
}
}
public void IncreaseElevation()
{
Elevation++;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
主窗口
public partial class MainWindow: Window
{
Person jack = new Person() { Name = "Jack", Elevation = 0 };
public MainWindow()
{
InitializeComponent();
this.DataContext = jack;
}
private void OpenNewWindow_Click(object sender, RoutedEventArgs e)
{
NewWindow newWindow = new NewWindow();
newWindow.Show();
}
private void IncreaseJacksElevation_Click(object sender, RoutedEventArgs e)
{
jack.IncreaseElevation();
}
}
新窗户
public partial class NewWindow: Window
{
Person jill = new Person { Name ="Jill", Elevation = 0 };
public NewWindow()
{
InitializeComponent();
this.DataContext = jill;
}
private void IncreaseJillsElevation_Click(object sender, RoutedEventArgs e)
{
jill.IncreaseElevation();
}
private void IncreaseJacksElevation_Click(object sender, RoutedEventArgs e)
{
}
}
}
解决方案
有多种方法可以做到这一点,但最终你只需要引用同一个Person
对象。一种方法是在以下构造函数中提供该引用NewWindow
:
Person jack = null;
public NewWindow(Person _jack)
{
InitializeComponent();
this.DataContext = jill;
jack = _jack;
}
当您创建时NewWindow
:
NewWindow newWindow = new NewWindow(jack);
newWindow.Show();
然后,您想要的任何地方都将拥有对同一对象NewWindow
的可用类级引用:Person
private void IncreaseJacksElevation_Click(object sender, RoutedEventArgs e)
{
jack.IncreaseElevation();
}
推荐阅读
- c++ - 保证复制省略和返回类型的前向声明
- solr - 使用 solr 管理面板将 csv 文件上传到 solr
- ssl - 使用 Wireshark 解密 EAP-TLS 1.3 流量
- javascript - 赛普拉斯如何在不影响间隔的情况下设置日期
- python - 我想在 django html 页面上显示 python opencv 视频我怎样才能实现它
- node.js - 获取具有关注者和关注者的相互列表
- python - 如何过滤熊猫数据框并保留特定元素?
- c# - 如何将 unicode 字符串从 c# 传输到 c/c++ dll
- azure - 获取无效参数:为与代理关联的证书指定的 *** 不正确。Azure 开发运维
- python - 正则表达式始终返回为 NoneType 或根本找不到任何模式