Сохранение ссылки в свойствах, назначенных параметрам
Я собираю мастера, у которого есть несколько страниц, которые показываются пользователю. Мне нужна одна страница, чтобы иметь возможность доступа к данным, выбранным пользователем на предыдущей странице. Моя идея состояла в том, чтобы просто передать параметр по ссылке в конструкторы обеих страниц, а затем назначить свойство этому параметру, но изменение не сохраняется между страницами. Я предполагаю, что это означает, что я неправильно использую ref. Я не могу передать данные непосредственно самим методам, поскольку они контролируются хостом мастера.
Инициализация хоста:
WizardHost host = new WizardHost();
using (host)
{
host.Text = Migration.Properties.Resources.AppName;
host.ShowFirstButton = false;
host.ShowLastButton = false;
host.WizardCompleted += new WizardHost.WizardCompletedEventHandler(this.Host_WizardCompleted);
Reference<DBManip> dbControllerRef = new Reference<DBManip>();
bool exportPathActive = false;
host.WizardPages.Add(1, new Page1());
host.WizardPages.Add(2, new Page2(dbControllerRef));
host.WizardPages.Add(3, new Page3(dbControllerRef, ref exportPathActive));
host.WizardPages.Add(4, new Page4(dbControllerRef, ref exportPathActive));
host.WizardPages.Add(5, new Page5());
host.LoadWizard();
host.ShowDialog();
Страница, на которой ссылка связана со свойством:
public Page3(Reference<DBManip> dbControllerRef, ref bool exportPathActive)
{
this.InitializeComponent();
this.DBControllerRef = dbControllerRef;
this.Page3Body.Text = Migration.Properties.Resources.Page3Body;
this.ExportPathActiveRef = exportPathActive;
}
public Reference<DBManip> DBControllerRef
{
get;
private set;
}
Если я изменяю exportPathActive в конструкторе, то это изменение сохраняется на следующей странице, но свойство, назначенное переданному параметру, не сохраняет ссылку. Я довольно новичок в C#, так что это, наверное, что-то глупое, что я скучаю, но я не могу найти это в Google или осматривать SO.
1 ответ
Я решил просто создать класс с именем PersistentData со свойством ExportPathActive, а затем передать его. Это работает хорошо, и я могу расширить его, чтобы хранить больше данных, если это необходимо. Я подожду, чтобы одобрить это в случае публикации более элегантного подхода.
Класс:
/// <summary>
/// A store to pass data between pages.
/// </summary>
public class PersistentData
{
/// <summary>
/// Initializes a new instance of the <see cref="PersistentData"/> class.
/// </summary>
public PersistentData()
{
this.ExportPathActive = false;
}
/// <summary>
/// Gets or sets a value indicating whether [export path active].
/// </summary>
/// <value>
/// <c>true</c> if [export path active]; otherwise, <c>false</c>.
/// </value>
public bool ExportPathActive { get; set; }
}