Я положил это приложение WPF http://tanguay.info/web/index.php?pg=codeExamples&id=164 вместе
http://tanguay.info/web/index.php?pg=codeExamples&id=164
, который читает XML-файл клиентов, позволяет пользователю редактировать их и сохраняет его обратно, , и все это хорошо работает .
Однако, когда пользователь нажимает кнопку Сохранить на странице «Управление клиентами», Я хочу, чтобы приложение «вернулось» на страницу «Показать клиентов».
«Страницы» - это пользовательские элементы управления, которые динамически загружаются в оболочку следующим образом:
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Reflection;
using TestDynamicForm123.View;
namespace TestDynamicForm123
{
public partial class Shell : Window
{
private Dictionary<string, IBaseView> _userControls = new Dictionary<string, IBaseView>();
public Dictionary<string, IBaseView> GetUserControls()
{
return _userControls;
}
public Shell()
{
InitializeComponent();
List<string> userControlKeys = new List<string>();
userControlKeys.Add("WelcomeView");
userControlKeys.Add("CustomersView");
userControlKeys.Add("ManageCustomersView");
Type type = this.GetType();
Assembly assembly = type.Assembly;
foreach (string userControlKey in userControlKeys)
{
string userControlFullName = String.Format("{0}.View.{1}", type.Namespace, userControlKey);
IBaseView userControl = (IBaseView)assembly.CreateInstance(userControlFullName);
_userControls.Add(userControlKey, userControl);
}
//set the default page
btnWelcome.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
private void btnGeneral_Click(object sender, RoutedEventArgs e)
{
PanelMainContent.Children.Clear();
Button button = (Button)e.OriginalSource;
PanelMainWrapper.Header = button.Content;
Type type = this.GetType();
Assembly assembly = type.Assembly;
IBaseView userControl = _userControls[button.Tag.ToString()] as IBaseView;
userControl.SetDataContext();
PanelMainContent.Children.Add(userControl as UserControl);
}
}
}
Поэтому, когда ManageCustomersView загружен и обрабатывает щелчок, я затем пытаюсь вернуться на страницу CustomersView , которая работает, но при этом открывается новое окно поэтому каждый раз, когда пользователь редактирует клиента, появляется новое окно .
private void OnSave(object sender, System.Windows.Input.ExecutedRoutedEventArgs e)
{
Customer customer = e.Parameter as Customer;
Customer.Save(customer);
//go back to default back
Shell shell = new Shell();
Button btnCustomers = shell.FindName("btnCustomers") as Button;
btnCustomers.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
shell.Show();
}
Как я могу изменить вышеуказанный код внутри одного UserControl так, чтобы его parent выгружал текущий пользовательский элемент управления и загружал другой, вместо того, чтобы выскакивать другой экземпляр приложения, как сейчас?