2017-09-07 6 views
-1

Ich habe ein Hauptfenster und es hat eine Schaltfläche. Wenn ich die Hauptfenster-Taste drücke, öffnet sich das Unterfenster. Im Unterfenster habe ich ein Textfeld und wenn ich den Text eintrage und auf die Schaltfläche Hinzufügen im Unterfenster klicke, sollte der Text im Hauptfenster angezeigt werden. Wie erreiche ich das? Danke im Voraus.WPF Text von einem Fenster zu einem anderen Fenster

+0

Die Frage ist, warum brauchen Sie das? Ist es eine kleine Anwendung mit nur einem Anruf? Oder brauchen Sie zig von diesen? Willst du nur zwei Fenster haben? – sTrenat

+0

Es ist eine Anwendung, in der ich viele Unterfenster habe, aber ich bin mit diesem Problem festgefahren. Alle Fenster funktionieren gut. Nur mit diesem Fenster bekomme ich den Text vom Unterfenster zum Hauptfenster nicht. –

+0

Die schmutzigen Wege: Statische Eigenschaft, Übergabe der Referenz an mainWindow durch Konstruktor oder eine andere Methode, MainWindow von Application.Current erhalten. (...). Nicht so schlecht: IoC und Fenster aus dem Container holen. Gut: EventAggregator/Listener/Beobachter/Mediator/Messenger oop – sTrenat

Antwort

1

Sie können den parametrisierten Konstruktor der MainWindow-Klasse erstellen und den Wert von Textbox vom Unterfenster zum Hauptfenster übergeben und in MainWindow können Sie Inhalt für diese Bezeichnung festlegen. Hier ist die Implementierung MainWindow.xmal.cs

public partial class MainWindow : Window 
    { 
    public MainWindow() 
     { 
     InitializeComponent(); 
     } 
    public MainWindow (string text) : this() 
    { 
     label.Content = text; 

    } 
    private void button_Click (object sender, RoutedEventArgs e) 
     { 
     Window1 win1 = new Window1(); 
     win1.Show(); 
     this.Close(); 
     } 
    } 

Hier ist der Code für Subwindow dh Window1.xaml.cs

public partial class Window1 : Window 
    { 
    private string text; 
    public Window1() 
     { 
     InitializeComponent(); 
     } 

    private void button_Click (object sender, RoutedEventArgs e) 
     { 
     text = textBox.Text; 
     MainWindow mainWindow = new MainWindow(text); 
     mainWindow.Show(); 
     this.Close(); 
     } 
    } 
+0

Dies verletzt die Trennprinzipien – Mafii

+0

hier ist Beispielcode, den ich in meiner Anwendung versuche –

+0

Hauptfenster XAML-Datei –

0

Sie können einfach den Konstruktor des zweiten modifizieren Fenster:

public partial class Window1 : Window 
    { 
    string text; 
    public Window1 (string _text) 
    { 
    InitializeComponent(); 
    this.text = _text; 
    } 
    } 
0

würde ich hinzufügen ein Ereignis für das Unterfenster 'Dialog', das MainWindow bei seiner Instanziierung abonnieren kann.

DialogWindow: (Subwindow):

public class DialogInputEventArgs : EventArgs 
{ 
    public string Input { get; set; } 
} 

public partial class DialogWindow : Window 
{ 
    public event EventHandler<DialogInputEventArgs> InputChanged = delegate { }; 

    private void SubmitInputButton_Click(object sender, RoutedEventArgs e) 
    { 
     InputChanged(this, new DialogInputEventArgs() { Input = this._inputTextBox.Text }); 
    } 
} 

Mainwindow:

private void ShowDialogButton_Click(object sender, RoutedEventArgs e) 
{ 
    DialogWindow dw = new DialogWindow(); 
    dw.InputChanged += OnDialogInputChanged; 
    dw.Show(); 
} 

private void OnDialogInputChanged(object sender, DialogInputEventArgs e) 
{ 
    // update the MainWindow somehow using e.Input (the text submitted in dialog) 
} 

Wenn Sie diesen Mechanismus für mehrere Fenster benötigen würde ich mit etwas mehr generisch, wie ein messagebus gehen oder beobachterpattern Sache.

0

Ich würde vorschlagen, dass Sie CaliburnMicro framwework verwenden, um eine einfachere und bessere Kommunikation zwischen Ihren Steuerelementen zu erreichen (vorausgesetzt, Sie verwenden das MVVM-Muster). Sie müssen nicht alle Funktionen von CaliburnMicro implementieren, nur EventAggregator, um das Senden und Verwalten von Nachrichten zwischen Ihren Steuerelementen zu verwalten.

Verwandte Themen