Frage

Ich habe eine kleine Chat-Anwendung in C # erstellt und begann als Konsolenanwendung. Allerdings möchte ich eine GUI erstellen für sie WPF verwenden. Es ist eine Klasse mit dem Namen DanMessengerClientwith Funktionen wie InitializeConnection(), SendMessage(string msg), etc.

Ich habe entworfen bereits die Benutzeroberfläche in Visual Studio, und es erstellt es Window1 Klasse auf Window1.xaml.cs standardmäßig. Ich habe einen Event-Handler für die Schaltfläche „Senden“, die erst ab jetzt einig Dummy-Text zu einem Textfeld anhängt. Meine Frage ist, wie soll ich die Sendmessage () Funktion aus der Window1 Klasse nennen?

Ich habe versucht, das Objekt in dieser Klasse zu schaffen, aber da muss ich auch die Textbox Zugriff von innerhalb der ersten Klasse (dh Wenn ich eine Nachricht empfangen, aktualisieren Sie die Textbox), den Verweis auf die Window1 Klasse Hinzufügen wirft eine StackOverflow Ausnahme weil es hält Referenzen in einer Endlosschleife zu schaffen.

Ich bin neu in GUI-Anwendungen. Wie soll ich vorgehen?

War es hilfreich?

Lösung

Die kanonische Weise in WPF-Daten anzuzeigen ist eine Steuerung, um es zu binden (siehe

Andere Tipps

Nur ein bisschen auf erweitern, was itowlson sagt:

ich durch die Schaffung einer Schnittstelle wie folgt beginnen würde:

interface IMessagingClient
{
    string MessageToSend { get; set; }
    string MessageBuffer { get; }
    void SendMessage();
}

Das Verhalten von Klassen der diese Schnittstelle implementieren soll ziemlich einfach sein. Wenn eine Nachricht empfangen wird, wird es hinzugefügt MessageBuffer (wahrscheinlich durch eine neue Zeile vorangestellt). Um eine Nachricht zu setzen MessageToSend und Call SendMessage() zu senden, die auch die gesendete Nachricht fügt MessageBuffer. Es gibt eine Menge von Details der Implementierung ich diese einfach zu halten bin übersprungen wird.

Als nächstes würde ich eine Testklasse bauen, die IMessagingClient und INotifyPropertyChanged umgesetzt. Diese Klasse muss nicht wirklich etwas tut real: es würde höchstwahrscheinlich nur zufällige Testnachricht in unregelmäßigen Abständen und zu aktualisieren MessageBuffer erzeugen; auch, wenn SendMessage genannt wird, wäre es MessageToSend und Update MessageBuffer löschen.

Ich würde dann fügen Sie den Code zu meinem Fenster eine Instanz dieser Klasse zu erstellen und die DataContext ihn gesetzt. Ich würde meine outbound TextBox binden an MessageToSend und meine eingehenden TextBlock zu MessageBuffer und ein Button Haken bis zu SendMessage nennen.

Nachdem ich die Benutzeroberfläche, die gegen meinen Prüfobjekt bekam, würde ich eine andere Klasse erstellen, die die gleichen Schnittstellen implementiert, nur würde diese ein eigenes DanMessengerClient Objekt erstellen, dass die Eigenschaft Setter mit interoperierte. Dann würde ich mein Fenster eine Instanz dieses Objekts stattdessen schaffen machen.

Ein tatsächliches Messaging-Client ist wahrscheinlich braucht immer ausgefeilter wird, zum Beispiel, können Sie eine LastMessageReceived Eigenschaft implementieren, so dass Sie etwas Besonderes mit diesem Text tun, wie es in einem ToolTip setzen. Und die MessageBuffer Eigenschaft könnte tatsächlich benötigen Rich Text in irgendeiner Art und Weise zu unterstützen. Aber das ist ein guter Ausgangspunkt.

scroll top