Hi,
ich habe ein Control den ich in XAML deklariere:
<designerControls:DesignerControl x:Name="DesignerControlElement"/>
In der entsprechenden Klasse wird dieses Control als Parameter übergeben:
public CassetteControl()
{
InitializeComponent();
Loaded += OnWindowLoaded;
DataContext = this;
}
private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
if (init)
{
FindCassetteController.Instance.Subscribe(new BaseImageMessageObserver(DesignerControlElement));
init = false;
}
}
Der BaseImageMessageObserver manipuliert dann zu einem späteren Zeitpunkt bei einem Netzwerk-Event den übergebenen DesignerControlElement.
Hier einige Fakten:* CassetteControl befindet sich in einem Tab, der standardmäßig nicht ausgewählt ist
Weiß jemand weiter? Ich danke im Voraus! 🙂
L. G.,
Steffo
Wie wird denn FindCassetteController.Instance
initialisiert?
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
Alles - auch in WPF - super einfach und eigenständig mit dem Debugger zu lösen.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Wenn Du ermittelt hast, was Null ist, kannst Du zur Lösungsfindung übergehen.
Warum ein Netzwerk-Event direkt in die UI geht; das ist mir ein wenig ein Rätsel.
[Artikel] Drei-Schichten-Architektur
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
@The69
public static FindCassetteController Instance { get; } = new FindCassetteController();
@Abt
Zu 1: Danke, ich weiß was null ist.
Zu 2: Auch dies ist mir bekannt.
Zu 3: Auch MVC und Co. sind mir bekannt. Es wird ein Bild in die GUI geladen und das Bild muss irgendwie rein kommen. Der Netzwerk-Code ist natürlich nicht direkt in der GUI, stattdessen gelangt das Bild mittels Observer-Pattern in die GUI.
@all: Es scheint, dass ein Property von DesignerControlElement erst bei der Anzeige per lazy evaluation geladen wird. Das muss ich mir mal genauer anschauen...
Hi SteffoD,
ja, die Controls werden automatisch gerneriert und wieder aus der Oberfläche entfernt. Daher kannst du nicht davon ausgehen, daß alle Instanzen von Anfang an vorhanden sind, oder die gleiche Instanz später immernoch vorhanden ist usw.
Warum lagerst du diese Logik nicht ins ViewModel aus? Dort hast du die volle Kontrolle über alles, und kannst Web-Requests abschicken und auf Antworten reagieren.
Die Controls sollten jedenfalls NUR für die Anzeige zuständig, und die Logik der Anwendung in der BL und die Logik der Benutzeroberfläche im ViewModel zu finden sein.
[Artikel] Drei-Schichten-Architektur
[Artikel] MVVM und DataBinding
Weeks of programming can save you hours of planning
Hi MrSparkle,
danke, ich habe mich erst mal eines Workarounds beholfen. Mit MVVM habe ich zwar schon gearbeitet, aber mir wäre erst mal nicht auf Anhieb klar, wie ich das in diesem Fall umsetzen sollte. Dazu bin ich noch nicht Profi genug, zumal ich ständig zwischen C++, Qt, Bildverarbeitung und C#/WPF hin und her springe und mir das ein tiefes Einarbeiten in WPF kaum möglich macht.
Ich werde auf jeden Fall im Hinterkopf behalten öfters ViewModels zu verwenden, wo mir das möglich erscheint. - An einigen Stellen mache ich das wie gesagt schon.