Portieren einer Konsolenanwendung WPF
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 DanMessengerClient
with 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?
Lösung
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.