1

Хочу сделать функцию для того чтобы постоянно не писать:

AddServiceWindow addServiceWindow = new AddServiceWindow();
this.Hide();
addServiceWindow.Show();

Пытаюсь реализовать функцию ShowWindow, но Rider ругается на this.

void ShowWindow(Window showWindow)
{
    showWindow.Show();
    this.Hide();
}

Подскажите как можно реализовать данную задумку?

SW1pr0g
  • 19
  • передать this в ShowWindow – Виктор Oct 13 '22 at 05:36
  • а не подскажете как это реализуется в C#? – SW1pr0g Oct 13 '22 at 05:45
  • Если ShowWindow находится в классе, то this там уже существует и его передавать не надо. Разместите функцию в классе окна, которое надо скрывать – Виктор Oct 13 '22 at 06:03
  • Я вам советую очень хорошо над этим всем подумать, ведь окно это не просто вывод, окно это еще и данные, которые вместе с этим окном идут, точнее связь с данными. Если вы делаете постоянно new MainWindow(); например, то вы создаете постоянно новое окно, со своими данными (ввели в одном окне, в другом, например не появится). По правильному, тут надо делать некий сервис, который будет хранить в себе окна и их VM слои (данные), а по запросу либо делать новое, либо вызывать уже имеющееся, но точно не так, как делаете сейчас вы. – EvgeniyZ Oct 14 '22 at 00:48
  • Удалось разобраться? – aepot Oct 17 '22 at 00:10
  • 1
    @aepot, удалось, не посоветуешь что и как учить если только начал учить WPF(XAML)+C# и плюс очень был бы благодарен если бы материалы скинул, книги например – SW1pr0g Oct 17 '22 at 20:30
  • https://ru.stackoverflow.com/q/416584/373567 – aepot Oct 17 '22 at 23:30

1 Answers1

1

Удобнее здесь будет с обобщением

public void ShowWindow<T>(Window owner) where T : Window
{
    T newWindow = new T();
    newWindow.Closed += (s, e) => current.Show(); // покажет обратно текущее окно, когда вызванное закроется
    newWindow.Owner = owner; // https://learn.microsoft.com/en-us/dotnet/api/system.windows.window.owner#remarks
    owner.Hide();
    newWindow.Show();
}
ShowWindow<AddServiceWindow>(this);
aepot
  • 49,560