Как перейти на другую форму и при возращении сохранить данные, которые были введены в TextBox
Я пишу программу по расширенному поиску в библиотеке, основная часть уже сделанная, но есть проблема. Проблема заключается в том, что при выборе книги и переходе на ее полное описание (ProductPage
) и потом при возвращении обратно на главную страницу (MainWindow
), данные которые я ввел в TextBox
должны быть сохранены, это как на каком-нибудь сайте при возвращении обратно на страницу, но все что я не пробовал ничего не работает. Снизу будет код без моих попыток, так как я запутался и решил все вернуть назад.
код страницы
Код страницы MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using BibliographicSearch.Models;
namespace BibliographicSearch
{
public partial class MainWindow : Window
{
private ObservableCollection<Works> requests;
private LibraryEntities2 libraryEntities;
public MainWindow()
{
InitializeComponent();
// Инициализация базы данных
libraryEntities = new LibraryEntities2();
// Загрузка видов изданий в выпадающий список
PublicationTypeComboBox.ItemsSource = libraryEntities.PublicationTypes.Select(p => p.PublicationTypeName).ToList();
// Отображение всех книг при запуске программы
DisplayAllBooks();
// Добавление обработчика события для щелчка на элементе DataGrid
BooksListBox.MouseDoubleClick += BooksListBox_MouseDoubleClick;
}
private void BooksListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// Получение выбранного произведения
Works selectedWork = BooksListBox.SelectedItem as Works;
if (selectedWork != null)
{
// Открытие нового окна с подробной информацией о произведении
ShowWorkDetails(selectedWork);
}
}
private void ShowWorkDetails(Works work)
{
// Получение выбранной книги
Works selectedWork = BooksListBox.SelectedItem as Works;
if (selectedWork != null)
{
// Переход на новую страницу с подробной информацией о книге
MainFrame.Content = new ProductPage(selectedWork);
}
}
private void DisplayAllBooks()
{
try
{
// Получение всех книг из базы данных
var allBooks = libraryEntities.Works.ToList();
// Отображение результатов в таблице
BooksListBox.ItemsSource = allBooks;
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при загрузке всех книг: " + ex.Message);
}
}
private void SearchButton_Click(object sender, RoutedEventArgs e)
{
try
{
string author = AuthorTextBox.Text.Trim();
string title = TitleTextBox.Text.Trim();
string keywords = KeywordsTextBox.Text.Trim();
string publicationType = PublicationTypeComboBox.SelectedItem as string;
int fromYear = string.IsNullOrEmpty(FromYearTextBox.Text) ? 0 : int.Parse(FromYearTextBox.Text);
int toYear = string.IsNullOrEmpty(ToYearTextBox.Text) ? int.MaxValue : int.Parse(ToYearTextBox.Text);
// Выполнение запроса к базе данных
var query = from work in libraryEntities.Works
where (string.IsNullOrEmpty(author) || work.AuthorName.Contains(author))
&& (string.IsNullOrEmpty(title) || work.Title.Contains(title))
&& (string.IsNullOrEmpty(keywords) || work.Keywords.Contains(keywords))
&& (string.IsNullOrEmpty(publicationType) || work.PublicationTypeName == publicationType)
&& (work.PublicationYear >= fromYear && work.PublicationYear <= toYear)
select work;
// Проверка наличия результатов поиска
if (query.Any())
{
// Отображение результатов в таблице
BooksListBox.ItemsSource = query.ToList();
}
else
{
MessageBox.Show("По вашему запросу ничего не найдено.");
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при выполнении поиска: " + ex.Message);
}
}
private void SortButton_Click(object sender, RoutedEventArgs e)
{
try
{
// Получение отсортированных результатов из таблицы данных
var sortedResults = (BooksListBox.ItemsSource as IEnumerable<Works>)
.OrderBy(w => w.Title)
.ToList();
// Обновление данных в таблице
BooksListBox.ItemsSource = sortedResults;
}
catch (Exception ex)
{
MessageBox.Show("Ошибка при сортировке: " + ex.Message);
}
}
}
}
Код страницы ProductPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using BibliographicSearch.Models;
namespace BibliographicSearch
{
/// <summary>
/// Логика взаимодействия для ProductPage.xaml
/// </summary>
public partial class ProductPage : Page
{
public ProductPage(Works selectedWork)
{
InitializeComponent();
DataContext = selectedWork;
}
private void BackButton_Click(object sender, RoutedEventArgs e)
{
// Создаем новый экземпляр MainWindow и отображаем его
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
// Закрываем текущее окно (ProductPage)
Window.GetWindow(this).Close();
}
}
}