首页 > 解决方案 > 从另一个类调用实例化方法

问题描述

在 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)
    {

    }
}

}

标签: c#wpf

解决方案


有多种方法可以做到这一点,但最终你只需要引用同一个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();
}

推荐阅读