<Setter.Value>
<TextBlock Text="{Binding Name}" />
</Setter.Value>
Das ist dein Problem! Damit erzeugst du einen (!) TextBlock der für alle Header verwendet werden soll, das geht mit einem Datensatz noch gut, spätestens der Zweite verursacht aber deine genannte Exception.
Deswegen gibt es den DataTemplate Knote. Denn ein DataTemplate dient als reine Factory des Baumes der darin enthalten ist. Richtig müsstest du also nicht die "Header" Eigenschaft mit deinem Style ändern, sondern die "HeaderTemplate" Eigenschaft! Anschließend den TextBlock in ein DataTemplate packen und... voila! 😃
Als Entwicklerkonferenz fand ich das Anmeldesystem einfach nur schlecht. Macht ja Microsoft nicht direkt sondern "eventcore".
Das System brach unter der Last einfach schön weg - nix mit automatischer Skalierung 😃.
Ich hab ein Ticket ergattern können, hat mich aber knappe 25 Minuten gekostet bis ich durch vier (!) Seiten bin
(Stammdaten, sinnlose Umfrage, ev. Hotelbuchung die ich übersprungen habe und anschließend der geliebte Zahlungsprozess).
Unter Betrachtung von diesen Umständen erstaunt mich der "Hype" um die "schnell" ausverkaufte BUILD 😃.
Alles in allem ist es natürlich eine künstliche Deckelung der Anzahl von Tickets.
Die letzten 2 Jahre bin ich auch auf der Warteliste gewesen, aber immer noch ein paar Wochen später "zugelassen" worden (wie so alle die ich kenne die auf der Warteliste sind/waren).
Genau zu so einer "Grüze" wird das gesamte dann aber...
Wenn niemand im Team nur zur hälfte in der Thematik steckt, bastelt irgendwer mal eben nen Prototypen der sich später "Produkt"
nennt und den man bereits ein halbes Jahr später nicht mehr angreifen möchte da es an jeder Ecke nur so "scheppert".
Da fehlt es an einigem fundamentalen Know-How im Bezug auf die Webentwicklung und das Verständnis von vielen Grundkonzepten in der "modernen Entwicklung".
Wir sprechen heute nicht mehr von statischen Websites die man mal eben bunt zusammenklickt. Auch bringt es nichts einfach mal 10 Fremdprojekte runterzuladen und einzubinden,
da dadurch die Anwendung nicht besser wird - es braucht ein Verständnis dafür wie die Dinge funktionieren und wie sie auch harmonieren.
Das traurige an der Geschichte:
Am Ende steht ihr als Entwickler auch noch Gerade wenn etwas nicht funktioniert.
Das soll bei Gott keine Eigenwerbung sein, aber gerade in so einem Fall, dass die Zeit drängt und es an einer "Technologie" scheitert, rate dazu sich jemanden ins Office zu holen der das Team einerseits schult und anfänglich begleitet.
Genau da kann man seine Fragen gezielt anbringen und sich die Tipps holen die einem die anfänglichen Hürden aus den Weg räumt.
Dann sind wir doch wieder bei dem Thema wo ich anfangs dachte wo du hinwillst?
Du wirst dennoch die "Datenliste" benötigen mit den 30000 Elementen - das kann dir auch egal sein du musst dich eben um die performante "Zeichnerei" der Elemente kümmern.
Das wäre dann ein VirtualiazingCanvas in dem Falle einfach?
Darüber haben sich schon Leute gedanken gemacht:
WPF Performance and .NET Framework Client Profile
Oder versteh ich dich nun wieder falsch?
Weil dann ist dein ItemsPanel kein "normales" Canvas sondern eben ein VirtualizingCanvas.
Finde das irgendwie eigenartig was du vorhast aber soll nichts geben was nicht irgendwer braucht 😃
Comparison operator overloading
*ARGH*: Vollkommen richtig - funktioniert ja nicht weils ein enum ist shameonme
Du kannst dir auch eine Property bauen die eine Action/Func entgegennimmt?
Also im Grunde ein delegate und dort kannst du dann deine jeweilige Methode zuweisen.
Aber ich würde an deiner Stelle nochmal kurz einen Schritt zurückgehen und nochmal auf das Ganze sehen da ich glaube das kannst du einfacher lösen.
Du willst benachrichtigt werden wenn die SMS verschickt worden ist, da würde es sich auch anbieten das per async/await zu machen dh. ein Task?
Ansonsten bau dir die Klasse doch einfach so dass du den EventHandler in der implementierung hältst ?
private event EventHandler<PluginSystem.Host.ISMSVersandErfolgreichEventArgs> _myEvent;
event EventHandler<PluginSystem.Host.ISMSVersandErfolgreichEventArgs> PluginSystem.Host.ISMSVerschicken.SendenErfolgreich
{
add { _myEvent += value; }
remove { _myEvent -= value; }
}
Offtopic: Ich find das irgendwie typisch Europa oder? Cloud? Oh nein auf keinen Fall! NSA, Datensicherheit usw. aber dem Hoster "ums Eck" der verglichen mit den Cloudanbietern winzig ist, dem vertraut man.
Merksatz: WENN die NSA deine Daten haben möchte, dann bekommt sie sie auch, egal wo sie liegen 😉 imho
Dann würde ich sowieso mit Code First arbeiten und mir sogar überlegen ob ihr nicht die Automatic Migrations einschaltet.
Das bedeutet jede Codeänderung am Model führt zu einer Datenbankänderung - sofern dies ohne Datenverlustmöglich ist (kann aber konfiguriert werden).
Dies würde ich aber dann wieder abschalten damit man die Kontrolle über die Migrations hat und dann fortlaufend auch mit manuellen Migrations "Snapshots" vom Design erzeugen und dadurch eine Versionierung einführen.
Du musst den Thread auch starten 😉 (--> myThread.Start()).
Weiters solltest du dich etwas in die Basics von Threading einlesen - ein Thread läuft nur solange er auch "beschäftigt" ist.
In dem Code von dir wird die Console auf jeden Fall zugehen, da static void Main() die Hauptmethode ist, und sobald diese abgearbeitet ist, wird die Console geschlossen.
Solange die Threads auch keine BackgroundThreads sind (IsBackground=true) , werden diese den Process sogar noch am Leben erhalten in diesem Falle - ob das gewünscht ist, ist fraglich.