2016-08-08 8 views
0

Ich stelle einen Assistenten zusammen, der mehrere Seiten enthält, die dem Benutzer angezeigt werden. Ich brauche eine Seite, um auf Daten einer Benutzerauswahl auf einer vorherigen Seite zugreifen zu können. Meine Idee war, einen Parameter per Verweis in die Konstruktoren beider Seiten einzutragen und dann diesem Parameter eine Eigenschaft zuzuweisen, aber die Änderung wird nicht zwischen den Seiten beibehalten. Ich nehme an, es bedeutet, dass ich ref falsch benutze. Ich kann keine Daten direkt an die Methoden selbst übergeben, da sie vom Host des Assistenten gesteuert werden.Referenz erhalten in Eigenschaften, die Parametern zugewiesen sind

Host-Initialisierung:

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(); 

Seite, wo ref mit Eigenschaft verknüpft ist:

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; 
    } 

Wenn ich exportPathActive im Konstruktor ändern, die Änderung in der nächsten Seite erhalten bleibt, aber eine Eigenschaft, die ist dem übergebenen Parameter zugewiesen ist, wird die Referenz nicht beibehalten. Ich bin ziemlich neu in C#, also ist das wahrscheinlich etwas Dummes, das ich vermisse, aber ich kann es nicht bei Google finden oder mich so umsehen.

+0

Sie können die Informationen in der Session-Variablen speichern können. –

+0

Das Wort "Seite" ist ein wenig irreführend, da die Frage mit "winforms" gekennzeichnet ist. –

+0

@ScottHannen Wie ist die Wortseite irreführend? Dies sind Seiten des Assistenten in einem Winforms-Projekt. –

Antwort

0

Ich habe beschlossen, nur eine Klasse namens PersistentData mit einer Eigenschaft namens ExportPathActive, und dann das übergeben. Es funktioniert gut und ich kann es erweitern, um mehr Daten bei Bedarf zu halten. Ich werde warten, um dies zu genehmigen, falls ein eleganterer Ansatz veröffentlicht wird.

Die Klasse:

/// <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; } 
} 
Verwandte Themen