WPF, переключение между несколькими окнами без утилизации

1

У меня 3 окна, и я могу переключаться между ними отлично. Проблема, с которой я сталкиваюсь, заключается в том, что окна не сохраняют данные при скрытии. Я думаю, что где-то они устраиваются, но я не знаю, как это сделать. У меня есть текстовое поле на двух окнах, чтобы проверить это. Он работал нормально, когда было только два окна, но добавление третьего создало эту проблему. Вот мое главное окно.

public partial class MainWindow : Window
{
    private AutoImport auto;
    private DTLegacy dleg;

    public MainWindow()
    {
        InitializeComponent();
    }

    public MainWindow(AutoImport parent)
    {
        InitializeComponent();
        auto = parent;
    }

    public MainWindow(DTLegacy parent)
    {
        InitializeComponent();
        dleg = parent;
    }

    private void btnAutoImport_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        if (auto == null) { auto = new AutoImport(); }
        auto.Show();
    }

    private void btnDTLegacy_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        if (dleg == null) { dleg = new DTLegacy(); }
        dleg.Show();
    }
}

Окно 1

public AutoImport()
{
    InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    MainWindow main = new MainWindow(this);
    main.Show();
}

Окно 2

public DTLegacy()
{
    InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    MainWindow main = new MainWindow(this);
    main.Show();
}

Я думаю, что ответ может заключаться в том, чтобы создать класс окна, но я не уверен, как это будет выглядеть.

  • 0
    Есть 2 понятия. В wpf (вместе с mvvm ) предпочтительнее, когда окно расположено. Просто сохраните ВСЕ свойства, необходимые для восстановления состояния в модели представления: фокус, выборки, введенные / выбранные значения и т. Д. Другая концепция заключается в том, чтобы создать окна один раз, а затем никогда не winforms их (известные winforms Hide ), все равно должно работать в wpf , Создайте экземпляры Windows при запуске и никогда больше не создавайте экземпляр (как вы!), Но вызывайте методы этого экземпляра Hide() / Show() .
Теги:
wpf
visual-studio-2013

1 ответ

1
Лучший ответ

Почему вы каждый раз создаете новый экземпляр MainWindow? Вы в настоящее время скрываете его, поэтому покажите его снова, а не создайте новый. Предполагая, что основным окном вашего приложения и AutoImport/DTLegacy являются "дочерние" окна, одним из решений было бы передать экземпляр MainWindow качестве параметра "дочерних" окон, чтобы вы могли легко вызвать .Show():

private MainWindow parent;
public AutoImport(MainWindow parent)
{
    InitializeComponent();
    this.parent = parent;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    this.parent.Show();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню