Сохранение ссылки в свойствах, назначенных параметрам

Я собираю мастера, у которого есть несколько страниц, которые показываются пользователю. Мне нужна одна страница, чтобы иметь возможность доступа к данным, выбранным пользователем на предыдущей странице. Моя идея состояла в том, чтобы просто передать параметр по ссылке в конструкторы обеих страниц, а затем назначить свойство этому параметру, но изменение не сохраняется между страницами. Я предполагаю, что это означает, что я неправильно использую 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; }
}
Другие вопросы по тегам