Вызов экземпляра метода из другого класса - PullRequest
0 голосов
/ 03 марта 2019

В MainWindow у меня есть экземпляр лица с именем jack, и, вызывая метод IncreaseElevation, я увеличиваю высоту Jacks.

В NewWindow у меня есть экземпляр лица с именем jill, и путем вызоваМетод IncreaseElevation Я могу увеличивать высоту Джилса.

Из NewWindow, как вызвать jack? IncreaseElevation, чтобы значение Mainsindow увеличивалось в MainWindow

Я уверен, что упускаю что-то очевидное.

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));
    }
}

MainWindow

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();
    }
}

NewWindow

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

    }
}

}

1 Ответ

0 голосов
/ 03 марта 2019

Существует множество способов сделать это, но в конечном итоге вам просто нужна ссылка на один и тот же объект 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...