willkommen bei myCSharp.de und speziell in der WPF Welt ;-)
Ich habe zwar nicht deinen ganzen Code im Detail durchgeschaut aber das Problem liegt vermutlich daran dass deine Datenklasse ein Struct anstatt einer class ist
Damit ist es pass by value anstatt pass by ref.
Das Resultat ist dass du vermutlich mit mehreren Kopien arbeitest.
Wenn du hingegen eine class - Datenklasse hast dann funktioniert es über die Referenz und du hast nicht mehrere Kopien
PS: Nur so als kleiner Hinweis. Guck dir mal WPF genauer an.
Denn mit dem DataBinding kannst du dir ganz viel Arbeit sparen.
Zudem brauchst du auch nicht das DataGrid mühsam im Code zusammenzubauen.
Das kannst du alles im Xaml - Code machen.
normalerweise müsste sich das schon sofort von alleine aktualisiern.
Was genau hast du da denn gemacht, bzw wo wird der Code aufgerufen.
Und bist du dir überhaupt sicher dass er aufgerufen wurde? => Setze mal einen Breakpoint oder bau ein paar Ausgaben ein
in WPF ist das am einfachsten wenn du die ganzen Strings in Resource Dictionaries packst.
Im ResourceDictionary gibst du dann jedem String einen eindeutigen Key mit welchem du nachher den String laden kannst.
Im C# Code kannst du die Daten aus dem ResourceDictionary laden. Da erstellst du dir noch am besten eine kleine Helperklasse welche das für dich macht. Dann kannst du deine Texte mit dem Key laden
Im Xaml Code kannst du die Strings aus dem ResourceDictionary mit DynamicResource laden. Damit wird es automatisch aktualisiert wenn die resourcen-datei gewechselt wird
Also z.B.
<TextBlock Text="{DynamicResource MyString}" />
Sobald du die Sprache in deinem Programm wechseln willst, muss du das aktuelle Sprach-ResourceDictionary mit dem neuen ResourceDictionary austauschuen (also in dem MergedDictionary). Zudem musst du auch noch CurrentUICulture und CurrentCulture setzen
Ist jetzt vielleicht etwas viel Input auf einmal aber das Ganze ist in WPF relativ einfach
schau dir mal den Link an den dir talla gepostet hat, denn dort ist genau beschrieben wie es funktioniert.
Du kannst dazu einfach das Grid verwenden.
Dann fügst du 5 ColumnDefinitions dazu mit jeweils einer Width="*"
Deine Controls kannst du dann im Grid hinzufügen und gibst mit Grid.Column die gewünschte Spalte an (die du vorher mit den ColumnDefinitions definiert hast)
Wenn nicht alle gleich groß sein sollen (z.B. Spalte 2 immer doppelt so groß wie die anderen) dann kannst du bei der Width ansatt den Stern einen Faktor und den Stern schreiben also so Width="2*" und bei den anderen Width="1*"
Für deine Buttons / Textboxen musst du entweder beim Haupt-Grid auch Zeilen hinzufügen (sofern das sinn macht) oder du verschachtelst die Container, weil wenn du mit den Margins rumfummelst dann wird sich das nicht schön resizen lassen
Dass es ums Geld verdienen geht ist doch klar.
Eigentlich geht es doch immer nur um das Geld :)
Zudem musste MS diesen Schritt jetzt auch machen, weil Google Apps (und das ganze Zeug) wurde immer beliebter
Für alle die es noch interessiert.
Die Gmail Anbindung hat nicht funktioniert. Ich habe noch lange damit rumprobiert aber ohne Erfolg.
Jetzt hab ich die Mails einfach alle von Gmail rüberkopiert (mit outlook) und auf Gmail eine Mail-Weiterleitung eingestellt
entweder du hast die Person-Klasse gar nicht erstellt, oder sie ist nicht zugänglich.
Im typeof gibst du an welchen Typ Objekt du serialisieren willst.
in der Theorie müsste das schon funktionieren.
Gmail sollte eigentlich schon funktionieren.
Es gibt viele Tutorials wo gezeigt wird was man tun muss, selbst ein Video von MS und da klappt es immer sofort
also du registrierst dich bei Office 365 einmal.
Gibst an welche Email Adresse du haben willst.
Dann kriegst du sowas foo@deinedomain.onmicrosoft.com
Damit kannst du dich dann einloggen.
Über eine Weboberfläche kann man alles konfigurieren.
Unter anderem hast du da auch die Möglichkeit "Verbundene Konten" zu konfigurieren.
Was so viel heißt dass du dort bis zu 5 Konten einstellen kannst wo er sich über POP3 oder IMAP regelmäßig die Mails abholt (dazu musst du nur die Zugangsdaten für POP3 / IMAP einstellen).
Diese landen dann alle in einem gemeinsamen Posteingang.
Über Regeln kannst du die Email von bestimmten Konten dann einer bestimmten Kategorie zuweisen oder in einen Ordner verschieben lassen.
Mit den Search Folders kannst du auch einfach nach Mails von einem bestimmten Konto filtern.
Die Logins von den anderen Konten brauchst du da nicht mehr. Du verbindest dich einfach zu Office 365 wo du alle Mails hast. Er holt sich automatisch das Zeug von den anderen Konten
Wenn du ein Mail schicken willst dann kannst du auswählen welches Konto du verwenden willst.
D.h. du musst nicht mit deiner ewig langen onmicrosoft.com Email Adresse schicken sondern kannst genauso mit den "alten" Adressen antworten.
Per default nimmt er AFAIK immer die Adresse mit welcher das Mail empfangen wurde
ich kann deine Bedenken bezüglich der Cloud Dienste gut nachvollziehen.
Gerade wie Apple eine Integration von Mac OS und iOS in die Cloud plant macht mir etwas sorgen. Weil da landen einfach zu viele Informationen in der Cloud die eigentlich nichts im Internet verloren haben.
Bei den Emails ist das IMHO etwas anders. Weil wenn man einen Gmail / Hotmail Account hat dann sind die Mails ohnehin schon im Netz.
Ob man den Anbietern jetzt so gut vertrauen kann dass die Mails wirklich gelöscht werden (beim POP3 download) oder ob da nur ein Flag gesetzt wird und die Mails weiter existieren.... So sicher wäre ich mir da mal nicht.
Wenn jemand gezielt an die Daten einer Person will dann gibt es bestimmt einfachere Wege als sich ein Leck in der Cloud zu suchen. Ein kleiner Trojaner am Pc ist da viel schneller eingeschleust, und die Mails haben die dann auch alle.
Ich bin schon auch nicht so überzeugt von der Cloud und man sollte damit bestimmt vorsichtig sein. Wenn es um irgendwelche kritischen Daten geht muss die Cloud ein tabu sein.
Aber in meinem Fall hab ich ohnehin schon IMAP verwendet um auf allen Geräten synchron zu sein. Und ob die Mails jetzt auf Office 365 oder auf einem anderen Server liegen macht auch keinen großen Unterschied mehr :)
vor ein paar Tagen hab ich mal Office 365 zum Test konfiguriert.
Auf dem ersten, zweiten und dritten Blick ist das Ganze echt klasse.
Speziell für kleine Firmen (so wie es bei mir der Fall ist) ist das ganze eine feine Sache.
Aufgrund der Exchange-Schnittstelle kann Outlook 2010 perfekt verbinden und man hat nicht so ein träges System wie bei IMAP
Zudem kann man über das Web-Outlook auch fast alle Funktionen verwenden und ist immer und überall synchron.
Als nächster und wichtiger Punkt integriert es sich auch sehr gut in mein (noch) nicht existierendes Windows Phone
Mehrere Email Konten (max 5) kann man verbinden und die Mails werden dann zyklisch abgeholt.
Der einzige (aber große) Kritikpunkt was ich momentan habe ist dass bei mir das Gmail und Exchange von der Uni nicht funktioniert.
Es gibt massig Tutorials wie man ein Gmail Konto hinzufügt (ist ja auch nix zu tun, als was hinzufügen zu klicken und email + pw einzugeben), aber bei mir werden die Mails nie geladen.
Nach ein paar Stunden wechselt der Status auf verzögert, d.h. er kann die Mails nicht laden.
Hat jemand von euch evtl. das Gmail Konto verbinden können?
Oder hat jemand Tipps woran es liegen kann? Weil die Daten von mir sind sicher richtig. Er verbindet sich erfolgreich (nach Eingabe der Daten) kann die Mails aber nicht laden.
an den Backslashes liegt es nicht.
Denn er hat das @ vor dem String geschrieben was dazu führt dass die Escape Characters nicht verarbeitet werden
D.h. man kann sich die doppelten Backslashes sparen
Hallo Jeanmy,
Vermutlich hast du keinen Zugriff auf diese Benutzerordner.
Deshalb kannst du nicht die Dateien auslesen
achso, jetzt verstehe ich was das Problem ist.
Du hast also mehrere Buttons mit verschiedenen EventHandler.
Wenn auf einen Button geklickt wird (im context menü oder wo auch immer) dann willst du einen gleichen Button nochmal haben. Ok?
Wenn du da so direkt mit den Button arbeitest dann wird das vermutlich ein ziemliches Gefummel.
Besser ist es wenn du versuchst die GUI von der Logik zu trennen.
Dann wird das Ganze wesentlich einfacher.
Wenn du das nicht willst dann kannst du evtl. im Event vom Button abfragen was für ein Typ Button es ist und dementsprechend den passenden EventHandler zuweisen.
Du kannst da ja einfach jedem Button den selben Click EventHandler zuweisen.
Da brauchst du dann nichts mit strings machen.
Also mit myNewButton.Click += ...;
Message=Die Datei oder Assembly "INuiInstanceHelper, Version=1.0.0.10, Culture=neutral, PublicKeyToken=31bf3856ad364e35" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.
Source=Microsoft.Research.Kinect
Er findet eine Datei oder Assembly nicht.
Adde diese mal in den Verweisen, dann müsste das passen.
ich hab in meinem Projekt WCF als Webservice verwendet.
Im ASPX Projekt und WPF Projekt konnte ich dann den Webservice einfach als Service Reference hinzufügen.
Dort kann man dann auswählen was für einen Datentyp man haben will.
D.h. in XML wird einfach eine Aufzählung von den Elementen gemacht.
Was das am Server für ein Listen-Typ war ist dabei egal.
Beim Client wird das ohnehin wieder in den festgelegten Typ gemappt.
Also kurz gesagt kann man da auswählen ob er eine List<T>, Array, usw. verwenden soll.
In Silverlight sollte das Ganze gleich bleiben (auch wenn SL manche Übertragungs-protokolle nicht unterstützt).
ist Strg+Umschalt+B nicht standard? Ich habs jedenfalls immer so.
Wenn du das umstellen willst dann kannst du unter die Optionen gehen
Dann Environment -> Keyboard
Danach siehst du rechts die einzelnen Funktionen / Aktionen.
Dort suchst du die Build-Aktion und kannst deine Tasten einstellen
das hab ich auch schon mal festgestellt.
Hab ein Programm für das Compact Framework geschrieben und konnte es dann Problemlos in Windows XP oder 7 starten.
Das hätte ich eigentlich auch nicht erwartet, aber es hat funktioniert =)
Das ist schon mehr als erschreckend.
Ich mach mir schon bei einem kleinen Studentenprojekt Sorgen wegen Sql-Injection und viele große Firmen kümmern sich nicht darum.
Gerade dabei kann man das Ganze schon mit relativ wenig Aufwand sicherer machen.
Aber meistens ist man als Programmierer so unter Zeitdruck dass man dazu neigt es Quick-And-Dirty zu machen
Das Problem ist dass du den GUI-Thread total aufhängst wenn du diese While Schleife hast.
Dieser kann dann auch nicht mehr deine UI-Inputs verwalten und es geht gar nichts mehr.
Siehe: [FAQ] Warum blockiert mein GUI?
Und zudem sollte man alles Eventbasiert machen. D.h. den Rechtsklick löst ein Event aus und du reagierst dann auf dieses.
Auf irgendwelche Benutzeraktionen sollte man nie warten
Insofern entsteht zwar ein zusätzlicher Nutzen für manche, aber keinerlei Verschlechterung für den Rest.
Naja, eine Verschlechterung ist das nicht direkt.
Aber eine Funktion welche nicht in jedem Browser funktioniert.
Deshalb gibt es dann bestimmt einige User die Jammern wie schlecht das Forum funktioniert. => Also doch eine Verschlechterung :)
Gerade bei Flash haben mittlerweile doch recht viele Leute den Flashblocker installiert.
wenn du Invoke verwendest dann wartet der Worker-Thread bis der GUI-Thread die aufgabe fertig hat.
Mit BeginInvoke wartet der Worker-Thread nicht bis der GUI-Thread fertig hat
Aber ohne weitere Informationen kann man hier so gut wie gar nix dazu sagen.
Debugge einfach mal durch den Code oder baue ein paar Ausgaben ein, damit du feststellst wo das Problem auftretet..
guck dir mal den Link an: WPF Styles and Control Templates - Data Triggers
Da siehst du anhand eines Beispieles wie man den Inhalt vom Button ändern kann.
Was du machen musst ist folgendes: Anstatt bei DataTrigger auf den Playername abzuprüfen, kannst du einfach den WindowState verwenden.
Mit dem Setter kannst du dann den Content vom Button setzen.
EDIT:
Das Binding an den WindowState müsste so aussehn