Laden...

Forenbeiträge von QuerDenker140 Ingesamt 9 Beiträge

07.10.2009 - 09:42 Uhr

ach du Heiliger ... da hab ich ne große Diskussion hervorgebracht.

Also das mag zwar schon sein, dass es mit XAML eine Möglichkeit gibt auch dynamisch Dinge darzustellen. Sagen wir es mal so: Ich bin dabei eine Kartenapplikation zu schreiben (d.h. sie ist fast fertig ... fast ...) die Postleitzahlen Deutschlands darstellt, diese lädt am Anfang die Deutschlandkarte und wenn man reinzoomt bzw. auch die Karte verschiebt werden Teile d.h. Postleitzahlgebiete 2er / 3er /5er dynamisch nachgeladen (die Postleitzahlen werden als Polygone erstellt, und da der User ja auch rein / rauszoomen und verschieben möchte, wurde die ganze Matrizenberechnung in C# gecodet, ich möchte denjenigen sehen, der mir sagen möchte, dass es einfacher wäre mit XAML). Die Daten werden dann von einem Webclient geladen (nicht Webservice, da ich keinen MS Server aufsetzen möchte und den vorhanden Linux Server benutze). Das Funktioniert bis jetzt tadellos. Ja .. und ich habe den Begriff Deep Zoom von Silverlight schon gehört und finde den Effekt auch bombastisch, aber das Problem dabei wiederum ist, das der User auf ein 5er PLZ klicken soll und dieses soll dann Farblich hervorgehoben werden. Da (so wie ich weiß) Deep Zoom aber nur mit Fotos hantieren kann, fällt dies also raus. (Da Postleitzahlgebiete nun einfach nicht viereckig sind ...)

Desweiteren ... als ich mich in das Thema eingearbeitet habe, hatte ich Vorerfahrungen von C++ / Java und ein wenig C#. Ich weiß das Styles in XAML programmiert um weiten schneller zu erstellen sind wie in C# (wenn man es mit Blend macht, ansonsten find ich es auch eine üble Arbeit). Ansonsten würde ich aber C# immer vorziehen, da ich durch das einarbeiten bemerkt habe, dass ich erstens besser damit coden kann und zweitens die Tutorials die ich mir auf msdn / der silverlight Page meistens einen weniger großen XAML Teil und dagegen einen großen C# teil hatten. D.h. meine Styles baue ich meistens in XAML. 80% der GUI ist auch in XAML d.h. Buttons, Auflistung ... etc, nur die Karte an sich ist komplett in C# gecodet.

Falls ich aber komplett falsch liege und mir jemand nen guten Tipp geben kann, wie ich Polygone, in Deep Zoom einbauen kann und dabei noch ein dynamisches nachladen von Polygonen über einen Webclient, der soll sich hier angesprochen fühlen 😃

so ... weiter zum eigentlichen Thema ... (trotzdem kann man mir auf obiges antworten 😉 ) ... so wie ich das sehe muss es als Referenz gehen, das heißt ich werde wohl nicht umher kommen mit Listen / Arrays oder am besten nem Dictionary hantieren zu müssen, welches die jeweilige Referenz der Checkbox beinhaltet .... oder sieht noch jemand ne leichtere Möglichkeit ohne Liste / Array oder ähnliches?

@Abt: interessant ... werde ich mir gleich mal anschauen ...

06.10.2009 - 17:02 Uhr

einfache Antwort:

da der Content dynamisch Nachgeladen wird und ich nicht wüsste, wie ich in XAML dies programmieren kann. Ich find es auch um weiten einfacher in C# Methoden zu schreiben bzw. auch die Übersicht ist um weiten besser als in XAML. Das ist jetzt aber nur mein persönlicher Eindruck ...

.. trotzdem bleibt die Frage. Wie kann man auf solche Elemente zugreifen?

06.10.2009 - 16:03 Uhr

Zu der Frage: ... war ja nur ein Beispiel .. nicht perfekt, aber um das positionieren gings mir an der Stelle nicht ...

Anscheinend kann ich doch noch nicht so gut C# ... wie mach ich das mit der Referenz?

Könntest du mir ein Beispiel machen?

EDIT ... da fällt mir ein ... meinst du etwa ich sollte folgendes machen:


CheckBox myCheckBox = new CheckBox()
{
   IsChecked = true;
};

                TreeViewItem ts = new TreeViewItem()
                {
                    Header = new Canvas()
                    {
                        Height = 20,
                        Width = 100,
                        Children =
                        {

                            myCheckBox,
                            new TextBlock()
                            {
                                Text = "Hallo",
                                Margin = new Thickness(25,0,0,0)
                            }
                        }
                    }
                };

und über die myCheckBox dann verknüpfen ... ja ... wobei ich mir das halt ersparen wollte, da ich später mehrere tiefen habe und dies dann recht aufwendig wird ... gibt es den in der Hinsicht keine Möglichkeit direkt auf das Objekt in einem Items Container oder Childen Container zuzugreifen?

06.10.2009 - 15:24 Uhr

Also, ich hab da mal ne Frage ...

nehmen wir mal an ich hätte folgendes geschrieben:


                TreeViewItem ts = new TreeViewItem()
                {
                    Header = new Canvas()
                    {
                        Height = 20,
                        Width = 100,
                        Children =
                        {

                            new CheckBox()
                            { 
                                IsChecked = true
                                 
                            },
                            new TextBlock()
                            { 
                                Text = "Hallo",
                                Margin = new Thickness(25,0,0,0)
                            }
                        }
                    }
                };

und ich möchte nun auf die Canvas Elemente zugreifen. Wie geht das? Das einzigste was mir im Moment einfällt wäre folgendes, was aber nicht der Hit ist:

((CheckBox)(((Canvas)ts.Header).Children.ElementAt(0))).Checked += new RoutedEventHandler(Page_Checked);

Sobald ich nämlich obiges leicht ändere, d.h. die Canvas umarbeite, muss ich dies immer wieder anpassen. Gibts eine andere Möglichkeit auf die Checkbox hier zuzugreifen, d.h. vielleicht mit einer Auflistung derer und danach per Tag, etc?!?

Wäre cool, wenn mir da jemand helfen könnte ...

31.08.2009 - 19:47 Uhr

mhm ... bis jetzt hab ich es einfach so gemacht, dass der Thread die Daten bearbeitet hat und ich danach die ganzen erstellten Daten an den UI Thread übermittelt hab, dieser widerum hat dann die Polygone erstellt, dadurch hab ich nur ein Invoke benötigt, hatte dafür aber immer das Problem, dass der Ladebalken nicht durchlief ...

31.08.2009 - 17:56 Uhr

okay ... das mit dem Stichwort "Marquee" hab ich, d.h. er läuft ja schon praktisch durchgehend, solange ich den WebClient bemühe die Daten zu besorgen, die Verarbeitung meiner Daten, läuft auf Threads sodass hier der Ladebalken auch noch "durchläuft". Nur ab dem Punkt, wenn die Polygone gezeichnet werden, hatte ich das Problem das er stockt bis stehen bleibt.

D.h. es gibt absolut keine andere Möglichkeit als Pakete aus den Polygonen zu erstellen und die in einem bestimmten Intervall zu zeichnen, sodass der Ladebalken doch noch ab und an aktualisiert wird...

An sich bedeutet das ja dann wieder, dass ich mehr Zeit benötige, da ich ja immer wieder etwas warten muss. Darum werde ich wohl nicht herumkommen?!?

(Danke übrigens für die Tipps 😃 )

31.08.2009 - 16:55 Uhr

Also, das hört sich schonmal gut an... was mich aber noch interessiert:

ist es den möglich einen Ladebalken durchgehend laufend zu lassen und im Hintergrund dabei Polygone aufzubauen? (Ich gehe jetzt einfach mal von um die 1000 Polygone aus)
Der Ladebalken sollte dabei nicht Prozentual vorgehen, sondern einfach kontinuierlich von links nach rechts gehen.

Bei mir jedenfalls läuft der Ladebalken nicht mehr, sobald ich die Polygone über den UI Thread aufbauen muss...

gibts dafür ne Lösung?

31.08.2009 - 10:21 Uhr

Okay, wo fange ich an:
Ich hab da mal ne Frage 😃

ich habe in der letzten Zeit mit Silverlight eine KartenApplikation geschrieben, welche Gebiete zeichnet, was heißt, ich habe in einer Datenbank Geokoordinaten, welche mir der WebClient serialisiert übermittelt.

Um diese Serialisierten Punkte wieder in double umzurechen, geschieht dies auf einem Thread, welcher die Punkte in ein PunktArray schreibt.

Jetzt hab ich aber ein Problem:
die PointCollection kann ich nur auf dem UI Thread aufbauen, was ich aber nicht so toll finde, immerhin muss ich nun über das PunktArray, welches ich wie oben beschrieben gebildet habe, nun noch einmal iterieren, was für mich bedeutet, dass ich doppelt soviel Zeit benötigt. (Ich iteriere über den String, sodass ich die Punkte aufbauen kann, diese würde ich aber gerne direkt in die PointCollection schreiben, aber das geht nicht auf dem "NICHT" UI Thread).

Der erste Lösungsansatz wäre nun also, die PointCollection einfach direkt über den UI Thread aufzubauen, d.h. jeder Punkt den ich mir aus dem String aufbaue, sollte gleich in die PointCollection geschrieben werden (und somit ebenso auf über den UI Thread geparst werden), das ist aber nicht wirklich toll, den ich habe in dem Moment einen Ladebalken auf der Canvas, und sobald ich den UI Thread dazu bemühe, das Array aufzubauen bzw. die Punkte direkt in die PointCollection zu schreiben, läuft der Ladebalken nicht mehr.

Gibt es nun eine Möglichkeit wie ich auf einem nicht UI Thread die Punkte aufbauen kann, und sofort in eine "Art" PointCollection schreiben kann, sodass ich später meinem Polygon diese übergeben kann, ohne dass ich 2mal über die Punkte iterieren muss?

z.b. würde ich gerne auf dem nicht UI Thread folgendes machen:

// auf Thread (nicht UI Thread!)
IList<Point> test = new List<Point>();
test.Add(new Point(1,1));
test.Add(new Point(2,1));
test.Add(new Point(3,1));

// oder
Point[] test = new Point[3];
test[0] = new Point(1,1);
test[1] = new Point(2,1);
test[2] = new Point(3,1);

//und später auf UI Thread:
PointCollection PCol = new PointCollection();
PCol = test;

// dies geht aber nicht, da Ilist bzw. List bzw. das PunktArray nicht gleich PointCollection

Ich hoffe mir kann da jemand helfen, der ein wenig Ahnung mit Threading hat 😃

17.08.2009 - 17:19 Uhr

Auf die gestellte Frage kann ich leider nicht großartig antworten. An sich gibt es eine Library von Sun, welche einem die MySQL Dienste verfügbar macht.

Meine Frage bzgl. diesem Thema (ich hoffe es antwortet jemand):
Ich schreibe zurzeit ein Projekt, welches einen Silverlight Client beinhaltet, welcher mit C# geschrieben worden ist. Die Datenbank ist eine MySQL Datenbank, auf die ich auch wunderbar zugreifen kann. Stichwort "Web Services".

Der Datenaustausch zwischen dem Web Service und dem Silverlight Projekt tut nicht immer?!? Was heißen mag:
Ich erstelle den Webservice und schreibe meine MySQL abfrage. Daraufhin klicke ich mit rechter Maustaste auf ihn und wähle "Im Browser ausführen aus". Daraufhin erstelle ich mir meinen Dienstverweis, welcher nun den Webclient ansprechen kann. Sobald ich aber im WebClient wieder eine neue Methode schreibe, und ich daraufhin die "Im Browser ausführen" tätige und den Dienstverweis aktualisiere, ist er für die Page.xaml.cs nicht mehr auffindbar .... Kann mir da jemand helfen???

An sich ist die Frage eigentlich nur, wie schaffe ich es auf eine MySQL Datenbank zuzugreifen über die gegebenen Mittel die Silverlight bietet. Ich hab zwar jetzt schon viele Foren durchforstet, d.h. die Tipps gingen hin zu WCF oder asmx.

Leider hab ich bis jetzt auch nur 2 wirklich gute Anleitungen gefunden:
http://blog.silverlight-city.de/post/2008/09/27/Verwendung-eines-WCF-Services-in-Silverlight-C-tutorial-training-schulung-lehrgang-wcf.aspx

http://silverlight.net/learn/tutorials/sqldatagrid.aspx