Laden...
Avatar #avatar-2909.png
michlG myCSharp.de - Experte
Student + Programmierer Naturns - Südtirol - Italien Dabei seit 26.07.2007 3.430 Beiträge
Benutzerbeschreibung

Forenbeiträge von michlG Ingesamt 3.430 Beiträge

16.10.2010 - 15:01 Uhr

Hallo Joplin,

willkommen bei myCSharp.de

Wie man die Daten speichern soll hängt immer auch vom Typ und der Menge der Daten ab.

In deinem Fall sollte eine XML Datei locker reichen.
Darin kannst du deine Datensätze ablegen.

Beim Start des Programmes würde ich dann einfach die Daten in eine lokale Datenstruktur laden und diese dann anzeigen.
Sowas kann man mit LinqToSql ziemlich einfach machen.

Die einzelnen Datensätze (Objekte) kannst du dann in eine List<T> oder eine andere generische Liste speichern. Wenn du WPF + Databinding verwendest dann ist die ObservableCollection<T> die erste Wahl 😃

Wenn du ein Objekt änderst oder ein Neues hinzufügst musst du dieses natürlich auch in deiner Datei übernehmen. Das ist bei Singleuser Betrieb aber kein problem.

Problematisch wird es erst wenn mehrere Benutzer zugleich an den Daten rumspielen. Dann ist eine Datenbank die erste Wahl.

PS: Du könntest auch jetzt schon anstatt der XML Datei eine Datenbank verwenden. SQL Compact oder Firebird brauche keinen installieren Server.

Gruss
Michael

15.10.2010 - 13:02 Uhr

Hallo Runnable,

die Manipulation-Events könnten dafür auch interessant sein.
Seit WPF 4 kann man wirklich kinderleicht Multitouch - Gesten erkennen.
Hier ein Tutorial dazu: http://blogs.msdn.com/b/llobo/archive/2009/12/21/wpf-manipulation-basics.aspx

Ich habe das selbst mal versucht und man kann ganz einfach Elemente drehen, zoomen, und verschieben. Alles ist so ähnlich wie beim IPhone oder anderen gängigen Touch-Dingern 😉

Gruss
Michael

15.10.2010 - 12:55 Uhr

Hallo,

das Problem ist dass du mit deinem Thread.Sleep den ganzen GUI-Thread blockierst und somit kann dieser nicht den Adorner anzeigen / verbergen.

Lagere die zeitintensive Operation in einen Worker-Thread aus und dann kannst du beim Start bzw. Beenden der Operation dein Adorner anzeigen / löschen.

Siehe dazu: [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Gruss
Michael

15.10.2010 - 10:52 Uhr

Hallo,

willkommen bei myCSharp.de

Das Auslesen klappt, hast du jedenfalls gesagt. Deshalb würde ich einfach in C# eine Datenstruktur erstellen in der du dir die ganzen Details zu einem Login speicherst.
Die ganzen Logins knallst du dann einfach in eine List<T> und zeigst diese dann in deiner ComboBox an.

Wenn in der CmbBox das SelectedItem verändert wird (also ein anderer Login gewählt wird) dann muss du die Daten in den Textfeldern aktualisieren.
Indem du das aktuell selektierte Item auf deine Datenstruktur castest und dann die Werte deinen TextBoxen zuweist.

Wenn der Benutzern dann einen Wert ändert und auf übernehmen klickt, kannst du einfach das UpdateStatement generieren und dieses auf der DB ausführen.
Wie ein Update auszusehen hast findest du in Google

PS: Die Query-Strings bittte nie einfach mit + zusammenhängen da man sich damit nur Probleme macht.
Verwende besser die SqlParameter

Man kann auch einen OR-Mapper (wie NHibernate oder EF) einsetzen um solche Dinge zu erreichen. Das ist aber nicht so einfach zu verstehen wie das einzusetzen ist

Gruss
Michael

15.10.2010 - 00:13 Uhr

Hallo Floschi,

ich habe das jetzt auch mal kurz getestet.
Bei mir Lokal funktioniert es wunderbar.
Anschliessend habe ich es Remote auf einem W2k3 Test-Server getestet. Da kann ich auch die Daten auslesen.
Der Versuch die Daten von einem Remote Win7 Rechner auszulesen hat nicht geklappt.

Versuche mal die Firewall testweise auszuschalten.
Zudem könnte es am nicht gestarteten Remote Registry scheitern. Starte den mal und versuch es erneut.

Hier wurde das Problem schon mal behandelt: GetEventLog and Remote Computers

PS: Ich habe eine Seite gefunden wo schön erklärt wird wie man das mit der PowerShell testen kann.
Siehe: Enumerate the remote EventLog with .NET

Gruss
Michael

14.10.2010 - 23:35 Uhr

Hallo sharpType,

PS: Möchte jetzt keine Diskussion anfangen, ob das ganze sinnvoll ist oder nicht. Es hat schon alles seine Gründe 😃

Gut. Genau diese Frage wäre jetzt als Erstes gekommen 😉

Also du hast deinen ominösen Button welcher dir bei einem Klick automatisch das Fenster vergrößert und evtl. verschiebt.

Soweit ist das alles noch klar. Aber wieso muss dein Form auch noch das Click-Event vom Button abonnieren?
Zusätzlich von dem wäre es IMHO besser wenn du dir ein eigenes UserControl schreibst welches den Button enthält und nach Aussen nur die nötigen Eigenschaften / Events bereit stellt. Also z.B. ein Resized-Event usw.

Da dein Button auch von anderen Menschen verwendet werden soll kann es sehr verwirrend sein wenn er dieses Click-Event bereitstellt und der Verwender eigentlich nichts damit anzufangen weiss.
Deshalb musst du darauf achten dass die Events / Properties einen sprechenden Namen haben.

Gruss
Michael

14.10.2010 - 18:25 Uhr

Hallo,

soll ich mir die 2010er oder die günstige 2008 Version kaufen? die Syntax ist doch die gleiche, oder?

Ja. Die Syntax ist die selbe.
In der 2010er Version findest du auch brandneue Technlogien die im VS2008 vielleicht noch nicht drinnen sind.
Als Anfänger wird man da aber nur wenige bzw. keine Unterschiede sehen

Also ich rate dir das 2010er zu kaufen.

Gruss
Michael

12.10.2010 - 21:09 Uhr

Hallo,

Tatsache? Ich dachte WinForms wären zu WPF nicht kompatibel ... egal ... Werd ich mich dann doch mal zumindest ans Testen machen müssen um zu sehen was alles geht und was nicht.

In WPF kann man ohne Probleme deinen WinForms-Dialog anzeigen lassn.
z.B. gibt es in WPF noch keinen OpenFileDialog (ausser von dritterherstellern) stattdessen verwendet man einfach immer noch die WinForms-Variante
In deinem Fall sehe ich da keinen Bedarf dass man dein UpdateSystem auch in WPF machen sollte.

Wwenn man direkt in einem WPF Fenster ein WinForms Control einfügen will dann ist es etwas umständlicher.
Aber selbst das ist mit dem WinFormHost kein Problem
Hier ein Beispiel: Integration of WinForms in WPF Applications

Gruss
Michael

12.10.2010 - 20:57 Uhr

Hallo zusammen,

ich habe das UpdateSystem ohne Probleme in einer WPF Anwendung verwendet.
Die Toolbox verwende ich ohnehin nie deshalb kann ich nicht sagen, ob man es einbinden kann oder nicht.

Jedenfalls habe ich einfach den Verweis auf die DLL hinzugefügt und dann ein neues UpdateController (oder so ähnlich) Objekt erstellt und ein paar Properties gesetzt.

Dann hat es schon problemlos geklappt.

Gruss
Michael

11.10.2010 - 21:47 Uhr

Hallo,

Ja ich weiß, dass es etwas unschön ist eine ganze Klasse so zu speichern, aber evtl. ist es bei mir notwendig.
Ich überlege ob ich doch alle Informationen in ArrayList einpacke und dann einfach ne extra Klasse schreibe, die die Informationen an die richtigen Plätze verweist.....

Was ist denn der Grund wieso du es nicht so machen willst / kannst wie dir alle vorschlagen?

Wie bereits von den anderen gesagt ist es am einfachsten wenn du dir eine Klasse erstellst die die ganzen Einstellungen enthält.
Diese kannst du dann speichern (bzw. serialisieren) und wieder auslesen.

.Net hat schon das Konfigurationsmodell integriert mit dem man recht konfortable die Einstellungen speichern kann.
gfoidl hat dir bereits ein Beispiel dazu gepostet.
Hier noch ein Tutorial dazu: [Tutorial] Das neue Konfigurationsmodell im .NET Framework 2.0

PS: Bitte beachte [Hinweis] Wie poste ich richtig?
Ein Blick in die Dokus / Forensuche hätte dir da sicherlich auch weitergeholfen

Gruss
Michael

11.10.2010 - 20:19 Uhr

Hallo stefan123,

Nun binde ich mittels CollectionViewSource(personen) eine Combobox und möchte das ein event ausgelöst wird und die details der person angezeigt werdem. Wie bringe ich das hin ohne den standart change eventhandler aufzurufen

Das kannst du ganz einfach mit den Binding-Mechanismen erreichen.
Dazu kannst du in deinem Details-Bereich an das SelectedItem der ComboBox oder direkt an das CurrentItem der CollectionViewSource binden und auf die Properties von der Person zugreifen.

Beispiel:


<CollectionViewSource x:Key="bla" ..... />
....
<ComboBox x:Name="cmb" ItemsSource="..:" />

<TextBlock Text="{Binding ElementName=cmb, Path=SelectedItem.Name}" />

Gruss
Michael

10.10.2010 - 21:54 Uhr

Hallo chras,


List<int> listX = new List<int>(50);
listX=listStart;

listX.RemoveRange(3, 40);

In diesem Code hier erstellst du eine neue Liste welche von listX referenziert wird.
Im nächsten Schritt setzt du die Referenz listX = listStart.
Damit zeigen beide Variablen auf die selbe Liste.

Wenn du nun das RemoveRange machst dann wird in der Liste der Bereich entfernt.
Und diese Änderung siehst du dann mit beiden Variablen da beide auf die selbe Liste zeigen.

Die Liste die du im Schritt 1 erstellt hast wird nicht mehr referenziert und wird früher oder später automatisch vom GarbageCollector entsorgt.

Gruss
Michael

10.10.2010 - 10:41 Uhr

Hallo Newbie83,

willkommen by myCSharp.de

Im Grunde ist es in WPF nahezu identisch mit dem Threading in WinForms.
D.h. du startest die Operationen die unter Umständen lange dauern könnten in einen Thread oder Backgroundworker.
Sobald die Arbeit fertig ist löst du ein Event aus damit der GUI Thread mitbekommt dass fertig ist.
Du musst dabei aber Beachten dass du keine threadübergreifenden Vorgänge machst (das ist in Java glaub ich erlaubt).

Hier findest du Details dazu:
[FAQ] Warum blockiert mein GUI?
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Auch in Google findest du massig Tutorials dazu.
PS: ich empfehle dich dein Programm mit dem MVVM Pattern (ja ich weiss, dass das einen auf den ersten Blick erschlägt) aufzubauen.
Damit kannst du die einzelnen Aufgaben auf die Schichten aufteilen und behälst den Überblick 😃

Gruss
Michael

09.10.2010 - 16:17 Uhr

Hallo,

Dieser unterscheidet sich komplett von den restlichen Views, da keine Menüs usw. vorhanden sind, sollte ich hier ein neues Fenster für den Hauptview öffnen oder ist es auch möglich, im aktuellen Fenster eine andere View-Klasse anzuzeigen?

Dafür gibt es mehrere Möglichkeiten.
Du kannst einfach ein Fenster mit dem Login anzeigen das nach erfolgreichen Login geschlossen wird und dann das MainWindow öffnet.
Die etwas bessere Lösung wäre einen Adorner über das gesamte MainWindow zu legen und diesen erst zu hiden sobald der Login erfolgreich war.

Wie genau man es macht hängt immer von der aktuellen Situation ab 😃

Hier muss lediglich der Inhalt geändert werden, deshalb habe ich mir gedacht, ein Grid für den Inhaltsbereich zu erstellen und dann je nach geklicktem Menü diesem Grid eine View zuzuweisen, wäre dies möglich?
Zu jeder View vom Hauptprogramm gibt es ein eigenes ViewModel.

Dafür eignet sich ein TabControl wohl am Besten.
Über die Registerkarten kann der Benutzer zwischen den Tabs wählen und du musst dich um nix kümmern.
Wenn dir das nicht gefällt dann kannst du auch ganz einfach selbst eine Liste von ViewModels erstellen und in einem Container nur das aktuelle ViewModel (mit dem passenden View) anzeigen.

Gruss
Michael

04.10.2010 - 09:59 Uhr

Hallo,

ehm.... Wie willst du den den Wert auslesen wenn du keine Instanz hast bzw. was für einen Wert willst du auslesen ohne Instanz?
Das ist doch rein logisch gesehen schon ein wiederspruch.

Gruss
Michael

03.10.2010 - 20:51 Uhr

Hallo,

die Fehlermeldung sagt eigentlich alles.
Er kann die Fill Eigenschaft nicht finden, deshalb muss man noch angeben welche Fill-Eigenschaft gemeint ist. In diesem Fall ist es die Fill-Eigenschaft vom Shape (also der Ellipse).

Dein TargetProperty müsste also so aussehen


Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"

Gruss
Michael

03.10.2010 - 20:46 Uhr

Hallo Amosius,

Aufgrund eines Frameworks, welches mir empfiehlt aus Buggründen die vollständige Definition in XAML vorzunehmen, möchte ich die Bindung nun umstellen auf XAML und habe folgendes Ziel (war als Beispiel dabei)

Was hast du denn da für ein komisches Framework? 😉

Schau dir mal das MVVM Pattern an. Dort ist es der übliche Weg über den DataContext an ein ViewModel zu binden.

Guckst du hier: WPF-Anwendungen mit dem Model-View-ViewModel-Entwurfsmuster
Also Framework kann ich dir Cinch oder Caliburn empfehlen

Gruss
Michael

29.09.2010 - 16:14 Uhr

Hallo brev,

DataTemplates und Converters sind ein sehr mächtiges Feature von WPF, deshalb sollte man sich auch damit vertraut machen 🙂
Siehe: WPF DataBinding, Styles and Templates
Oder WPF Introduction: Databinding + Styles + IValueConverter

Und hier noch ein Link zu dem Galileo Open Book 🛈

Gruss
Michael

29.09.2010 - 16:09 Uhr

Hallo,

in WPF kann man die Scrollbars recht einfach synchronisieren.
Hier findest du ein Beispiel: Synchronize Scrollbars - Codeproject

Mit ein paar kleineren Anpassungen kannst du das machen was du vorhast

Gruss
Michael

29.09.2010 - 15:38 Uhr

Hallo,

Dabei soll die Dartstellung des Textes in den einzelnen Zeilen(von Eintrag zu Eintrag unterschiedlich, deswegen denke ich, dass es nur in Codebehinsd geht)

was genau willst du da überhaupt machen?

Du könntest evtl. einen ValueConverter verwenden um den text zu generieren oder du nimmst dir ein DataTemplate.
Wie man vorgeht hängt davon ab was du genau machen willst.

Gruss
Michael

28.09.2010 - 23:37 Uhr

Hallo Leute,

ich habe so etwas ähnliches auch vor ein paar Monaten erlitten

Bei mir war es eine einfache Statistik in der Messwerte über einen vom User gewählten Zeitraum dargestellt wurden
Wenn dieser einen großen Zeitraum gewählt hat, hatte ich teilweise > 30k Messpunkte.
Dadurch ist mein Chart (Syncfusion) total ins Schleudern gekommen. Der Aufbau dauerte mehr als 20 Sekunden bei einem Core i7 und brauchte 1 GB Ram

Die Daten habe ich mit einem Algorithmus gefiltert.
Den Algorithmus habe ich mit der Hilfe des Forums erstellt. Siehe: Algorithmus um Kurve (eine Liste von Punkten) zu komprimieren

PS: ich rate dir von Syncfusion ab, denn deren Controls sind wie ein Weihnachtskalender (nur das ganze Jahr über).
Jeden Tag kann man sich überraschen lassen was man für einen neuen Bug findet. 😃

Gruss
Michael

28.09.2010 - 21:56 Uhr

Hallo LuckyStrike,

das macht jeder wie er es will 😃
Wenn ich nur kleine Projekte habe die ohne Setup ausgeliefert werden dann wird einfach die Exe + Dlls in einen Ordner kopiert.

Wenn ich hingegen ein größeres Projekt habe dann erstelle ich ein Setup Projekt und erstelle eine Ordner unter C -> Programme. Darin gibt es dann eine kleinere Struktur (sofern das Sinn macht) und eine Verknüpfung auf dem Desktop + Startmenü.

Aber wie gesagt habe ich da schon viele verschiedene Strukturen gesehen, wobei ich es wie gesagt einfach alles in einen Ordner knalle 😃

Gruss
Michael

28.09.2010 - 19:44 Uhr

Hallo AigeS,

willkommen bei myCSharp.de

Das Problem ist dass du im Constructor ein neue zustandstabelle - Variable erstellst.
Und diese ist dann auch nur im Constructor sichtbar / zugreifbar.

Um das Problem zu lösen musst du diese Variable ausserhalb des Constructors als Klassenvariable deklarieren und dann den Wert zuweisen.

Somit hast du später auch die selbe Variable.

Bitte beachte: [Hinweis] Wie poste ich richtig?
Das fällt in die Kategorie 1.1 und 1.1.1

Gruss
Michael

28.09.2010 - 18:25 Uhr

Cinch - Codeplex

Und da gibt es ja auch noch Cinch 😃

Ziemlich mächtig und unterstützt in der V2 WPF und Silverlight

Grüsse
Michael

28.09.2010 - 10:50 Uhr

Hallo reimac,

was genau ist das Problem dabei?

Das würde in etwas so aussehen.


var border = new Border();
var brush = new VisualBrush();
brush.Visual = myImage;
border.Background=brush;

Gruss
Michael

27.09.2010 - 16:59 Uhr

Hallo reinmac,

in WPF funktioniert das Ganze um einiges einfacher.

Dazu musst du nicht eine Zeile Code schreiben.
Eine bisschen DataBinding, ein paar Transformations und Effekte und du hast eine schöne Reflektion. 😃

Hier ein Tutorial dazu: How to create great image effects with WPF/XAML

Gruss
Michael

27.09.2010 - 11:28 Uhr

Hallo mikefried,

Nur bekomme ich das Binding nicht hin. In VisualStudio kann ich in den Eigenschaften des DataTrigger keinen Elementennamen Auswählen?

Ob man das im Designer kann oder nicht kann ich dir nicht sagen.

Aber es ist bei jedem Binding möglich den ElementName anzugeben und somit an ein Control mit diesem Namen zu binden.

Gib also anstatt der RelativeSource mit dem FindAncestor einfach ElementName="ProxyServer_CheckBox" an und das Problem ist gelöst.

Gruss
Michael

27.09.2010 - 00:20 Uhr

Hallo tom-cat,

irgendwie kapiere ich nicht ganz was genau das Problem ist, aber vermutlich hast du beim auslesen der Daten schon einen Fehler gemacht.
Du musst dir die ganzen Objekte rausholen und diese in Form einer Liste an die ListBox binden (also das komplette Company oder Application Objekt).
In der ListBox kannst du mit einem ItemTemplate oder dem DisplayMemberPath dann die gewünschten Eigenschaften anzeigen.

Anschliessen kriegst du über das CurrentItem von der Liste die du gebunden hast (am besten ein ObservableCollection) das Element raus welches momentan selektiert ist (also die Company oder Application).
Dabei hast du dann das komplette Objekt und nicht nur den Namen.
Somit kannst du wie gewünscht die ID in die Tabelle schreiben.

Gruss
Michael

27.09.2010 - 00:03 Uhr

Hallo grisham88,

willkommen bei myCSharp.de

Ich hab ein Prob in meinem Programm (WPF), ich möchte das ein Befehl ausgeführt wird wenn man das Programm beendet, also wenn man x drückt. Es soll noch eine Datei gelöscht werden wenn mans beendet, ich hab nur keine Ahnung wie ich das anstellen soll.

Dazu musst du das Closed Event abonnieren und dann kannst du darin darauf reagieren und deine Datei löschen.

Bitte schau dir mal die Open Books an 🛈 📗 :rtfm:
Deshalb muss ich dich auf [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1 verweisen, denn wir setzen hier ein gewisses Basiswissen (Grundlagen) voraus.
Zudem hätte ein Blick in die Doku / Google dir dabei sicherlich auch helfen können

Wie man mit Events umgeht ist auch in den Open Books ausführlich erklärt

Gruss
Michael

26.09.2010 - 11:57 Uhr

Hallo,

dieser Code funktioniert ohne Exception


object[] objs = new object[] {
      new object[] { "", 3 },
      new object[] { "test", 4 }
    };
string s = (string)((object[])((object[])objs)[0])[0];

Das funktioniert natürlich nur wenn du den index 0 auf string castest. weil im 1er ist der Integer Wert (3) dann kracht es natürlich.

Was für einen Fehler hast du bekommen?

Gruss
Michael

26.09.2010 - 09:48 Uhr

Hallo Ifoko,

Leider entspricht die Performance überhaupt nicht meinen Erwartungen. Sobald das UserControl oder Page etwas komplexer wird (paar Grids,..) dauert es einfach zu lange (2-5 Sek.) bis das Fenster neue gezeichnet wird.

Nur wegen ein paar Grids wird WPF nicht so langsam. Ausser du hast einen PC der den Weltkrieg miterlebt hat 😃

Um den vollen Umfang vom DataBinding und anderen WPF - Vorteile nutzen zu können ist es empfehlenswert die Anwendungen mit dem MVVM Pattern aufzubauen.
Dazu gibt es im Internet viele Tutorials und Frameworks.
Siehe dazu: Cinch - Framework

Das was du machen willst lässt sich damit sicher locker bewerkstelligen.
Dabei ist es auch eigenartig dass du momentan so eine schlechte Performance hast. Kann es sein dass du extrem viele Artikel / Kunden in deinen Listen hast??

Gruss
Michael

25.09.2010 - 18:47 Uhr

Hallo LohoC,

willkommen bei myCSharp.de

Ich habe den Code jetzt mal schnell überflogen und muss sagen dass er nicht schlecht aussieht.
Da ist man schon schlimmeres gewohnt 😃

Ein paar Kleinigkeiten habe ich aber gefunden:*Schau dir mal die Naming Conventions an. Du hast Namen verwendet die nicht dem Standard entsprechen -> Siehe Microsoft Naming Conventions *Du hast ab und an == true geschrieben. Das ist nicht nötig -> Siehe [Tipp] Anfängerfehler == true / == false *Du hast Pfade mit + zusammengefügt. Das sollte man nicht machen da man damit Probleme kriegen kann. Besser ist es dabei **:::

Gruss
Michael

25.09.2010 - 12:27 Uhr

Hallo PMNS,

ich habe das zwar noch nie verwendet aber damit sollte es klappen.
Siehe: Enumerating Instances of SQL Server (ADO.NET)

Gruss
Michael

24.09.2010 - 22:16 Uhr

Hallo,

willkommen bei myCSharp.de

Du musst deinen Kartenarray ausserhalb der Methode deklarieren (also Klassenvariable).
Damit kannst du dann von den Methoden darauf zugreifen.

PS: Bitte beachte: [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1

Gruss
Michael

24.09.2010 - 11:56 Uhr

Hallo Da_Flo,

verwende eine Liste oder DataTable und binde diese an die ItemsSource des DataGrids.
Dann kannst du im Codebehind direk durch die Liste laufen ohne direkt auf das DG zugreifen zu müssen

Gruss
Michael

23.09.2010 - 19:13 Uhr

Hallo zusammen,

Dass funiderte Diskussionen besser / schöner sind als einfache Meinungsäußerungen ist klar. Viel erschreckender ist jedoch, das hier gleich so ein Rummel darum gemacht wird wenn jemand in einem aus über 80000 Threads aus irgend einem bestimmten Grund seine Meinung mal außnahmsweise nicht begründen will.
Und zudem hat dieser Jemand die anderen ja nicht an einer Diskussion gehindert.
Man muss es halt akzeptieren wenn jemand es nicht für die Mühe wert hält über ein bestimmtes Thema zu diskutieren.

Sicherlich war es eine harte Aussage zu behaupten dass EBC krank ist, aber das ist ein persönliches Empfinden und das kann man wohl Niemanden verbieten.

Gruss
Michael

23.09.2010 - 10:23 Uhr

Hallo Froggie,

Hängt es damit zusammen, dass der Cursor in einem BackgroundThread läuft? wie kann ich dennoch mein Ziel erreichen?

Ich gehe mal stark davon aus dass es nicht funktioniert weil du es im BG Thread setzst.
Mach das besser über ein Invoke im GUI - Thread.

Siehe dazu: [FAQ] Warum blockiert mein GUI?

Gruss
Michael

22.09.2010 - 16:13 Uhr

Hallo Nightwolf83,

Ist das irgendwie möglich?

sicherlich ist das möglich.

Dazu musst du dir einfach ein Template für den Exander erstellen und dann kannst du den Header gestalten wie es dir gefällt.

Gruss
Michael

22.09.2010 - 14:45 Uhr

Hallo,

es wird unter C:\Users\User\AppData... drinnen installiert.
Den genauen Unterordner kann ich dir auch nicht sagen.

Gruss
Michael

22.09.2010 - 14:43 Uhr

Hallo,

die ObservableCollection leitet normalerweise alle Änderungen (hinzufügen, löschen usw.) direkt an die GUI weiter.
Die Items in der ObservableCollection müssten selbst das INotifyPropertyChanged Interface implementeiren und das PropertyChanged Event auslösen sobald sich eine eigenschaft geändert hat.

Wenn du nur Elemente hinzufügst / löschst müsste das aber nicht nötig sein.

Mit löschen meinst du schon ein myObservableCollection.Remove(myItem) (oder RemoveAt)?
Denn das müsste so schon funktionieren

Für Mode und UpdateSourceTrigger benötige ich den Path. Bislang habe ich im Path ein konkretes Property angegeben. Welche Bezeichnung wird erwartet? Am meisten Sinn würde doch der Name der Observable Collection machen, die ist aber doch kein Path?!

Sry, das mit dem Binding ist so schon korrekt, da du ja die ObservableCollection direkt an den DataContext bindest. Deshalb ist ein {Binding} ausreichend

Gruss
Michael

22.09.2010 - 13:36 Uhr

Hallo Da_Flo,

in WPF kriegst du das schon auch hin.
Es ist dafür aber wichtig das man die Trees (Visual / Logical Tree) versteht.
Siehe: Trees in WPF

Schau dir mal die VisualTreeHelper bzw. LogicalTreeHelper Klassen an

Gruss
Michael

22.09.2010 - 11:39 Uhr

Hm, ja der ScrollViewer könnte schon ein kleines Problem sein.
Versuche es mal ohne ScrollViewer dann bist du sicher dass es nicht daran liegt.

Hier ist ein BeispielCode wie man so einen Zoom selbst bauen kann.
Das Beispiel ist zwar Silverligth, aber das sollte in WPF schon auf funktionieren:
Silverlight 3 - ScaleTransform or other method to zoom in a Canvas?

Grüsse
Michael

22.09.2010 - 11:17 Uhr

Hallo Quaneu,

Also das ich mit dem Mauszeiger immer an der selben Stelle bleibe und alles darum "gezoomt" wird.

das ist eine simple Berechnung.
Vergrößere das Ding einfach und verschiebe es automatisch so dass die Maus immer noch auf den selben Punkt zeigt.

Also vor dem Verschieben einfach den Punkt merken auf dem die Maus zeigt.
Anschliessend zoomen und das Element so verschieben dass die Maus immer noch auf dem selben Punkt zeigt.

Das wäre eine Lösung, aber da gibt es bestimmt auch noch andere

Gruss
Michael

22.09.2010 - 11:14 Uhr

Hallo Amosius,

  1. Das Grid zeigt mir nicht nur die 4 gebundenen Eigenschaften der Elemente sondern zusätzlich noch alle Eigenschaften die das Element besitzt. Mein Verdacht liegt auf dem ItemsSource="{Binding}" im DataGrid. Lasse ich das weg, wird nichts mehr angezeigt. Ich möchte jedoch nur die 4 Eigenschaften anzeigen lassen, nicht alle Eigenschaften.

AutoGenerateColumns (oder so ähnlich) ist eine Eigenschaft die angibt ob das DataGrid selbst die Spalten der Datenquelle hinzufügen soll.
Setze diese Eigenschaft auf false und das Problem ist gelöst.

  1. Die Scrollbar VerticalScrollBarVisibility="Visible" ist zwar sichtbar aber nicht aktiv.

Was verstehst du unter aktiv? Siehst du die Scrollbar kannst aber nicht scrollen?

  1. Neue Elemente die der Observeable Collection hinzugefügt werden, werden auch im DataGrid aktualisiert angezeigt. Lösche ich ein Element aus der Observeable Collection wird dies nicht im DataGrid entfernt.

Das sieht fast nach einem Fehler im Binding aus.
Versuche mal im Binding den Mode=Two, UpdateSourceTrigger=PropertyChanged zu setzen.

Gruss
Michael

22.09.2010 - 10:35 Uhr

Hallo Warenschild,


x = 0;

Vielleicht weil du sie selbst auf 0 setzst? 😉

Die Random Objekte sollte nicht in der Methode initialisiert werden weil die wenn du die Methoden schnell hintereinander aufrufst mit dem selben Ticks (Uhrzeit) initialisiert werden und deshalb bekommst du dann die selben Zahlen.

PS: Was willst du da überhaupt erreichen?

Gruss
Michael

22.09.2010 - 10:25 Uhr

Hallo Gizzly,

also ich verwende auch oft die ViewBoxen und dabei ist es IMHO kein Problem.
Ich habe den Container in der ViewBox immer so gestaltet dass er gleich groß ist wie sein Content oder ich gebe direkt eine fix Größe für diesen Container an (sofern es sich nur um statischen Inhalt handelt).

Also du musst es irgendwie hinkriegen dass das ContentControl die Größe seines Inhalts annimmt dann klappt das schon

Gruss
Michael

22.09.2010 - 10:22 Uhr

Hallo Matl,

winSharp93 hat dir eigentlich alle Informationen geliefert die du brauchst.

Mit einer kleinen Google Suche wärest du auf folgende Links gestossen:
Introduction to Dependency Properties
Attached Properties

Es ist klar dass das am Anfang alles etwas viel ist, aber da muss man sich durchkämpfen und selbst lernen. Es bringt dir nix wenn wir dir hier die Lösung posten.

Beachte bitte: [Hinweis] Wie poste ich richtig? 1.1 + 1.1.1 und 4b

Gruss
Michael

21.09.2010 - 10:55 Uhr

Hallo,

simples Verhalten (das ist "zusammenklickbar" !!!) in WPF zu solchen "Verrenkungen" führt

Da hast du wohl was falsch verstanden.
Denn das was man in WinForms einfach zusammenklicken kann kann man in WPF noch einfacher zusammenklicken 😉

Also hier PseudoCode wie das aussehen sollte.


<UserControl>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="100" />
      <RowDefinition Height="*" />
      <RowDefinition Height="100" />
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" Text="HEADER" />
    <ScrollViewer Grid.Row="1" HorizontalScrollbarVisibility="Visible" VerticalScrollbarVisibility="Visible">
       <DataGrid />
    </ScrollViewer>
    <TextBlock Grid.Row="2" Text="FOOTER" />
  </Grid>
</UserControl>

Ist nur hier schnell getippt deshalb sind kleine Tipp / Denkfehler möglich 😃

Gruss
Michael

20.09.2010 - 22:05 Uhr

Hallo,

Also wenn ich das mit 'nem Grid mache, passiert im Prinzip das Gleiche: Das innere Datagrid bläht das umgebende Grid auf.
Im Prinzip möchte ich, dass sich das äussere verhält, wie mit fest eingestellter Größe-aber es soll sich dabei an seinem Parent orientieren... Ich hoff das ist verständlich, denn ich weiß echt nicht, wie ich's erklären soll 😉

Das ist so eigentlich normal (sofern ich dich richtig verstanden habe).

Du musst in deiner GUI durch die LayoutContainer die Größe des UserControls dann so setzen wie es dir gefällt.
Es wäre ja nicht praktisch wenn man ein UserControl hat das sich nicht an die Größe anpasst.

Aber falls du eine max. Größe hast die nicht überschritten werden soll dann kannst du evtl. MaxHeigth oder MaxWidth verwenden.

Gruss
Michael

20.09.2010 - 21:38 Uhr

Hallo,

verwende einfach ein Grid und füge dem die drei Zeilen hinzu.
Die erste hat die fixe höhe, die zweite ist auf Height="*" und die Dritte hat auch eine fixe Höhe.

Das DockPanel ist dafür nicht so super.
In WPF ist das Grid der mächtigste LayoutContainer 😃

Gruss
Michael