Laden...

Forenbeiträge von Lando Ingesamt 74 Beiträge

05.11.2014 - 16:42 Uhr

Hallo,

dass Kaxaml dir das x:Class-Attribut anmeckert ist klar, das Programm kennt deine Codebehind-Datei nicht. Wenn du das Attribut entfernst, sollte alles dargestellt werden. Wenn das klappt, dann liegt der Fehler im Codebehind.

Warum steht dein Window-Element überhaupt auf Zeile 3? Sollte es nicht eigentlich Zeile 1 sein?

Grüße

29.10.2014 - 16:55 Uhr

Selbst wenn das Laden so funktioniert, die GUI bekommt es [vermutlich] gar nicht mit, dass sich der Variablenwert geändert hat. Siehe dazu auch INotifyPropertyChanged-Interface. Generell sieht der Code sehr eigenartig aus, warum ist z. B. diese Liste statisch?

16.10.2014 - 17:29 Uhr

Methode1 gibt hat als Rückgabewert Dictionary2

Damit zeigt deine Dictionary1 Variable auf das selbe Objekt. Value Types and Reference Types

25.09.2014 - 16:35 Uhr

Hallo,

was du erreichen möchtest macht man mit Attached Properties.

Gruß

19.09.2014 - 15:40 Uhr

Dazu braucht man keine eigene Klasse, Attached Properties reichen dazu schon.

13.09.2014 - 10:50 Uhr

Dieser Fehler klingt danach, als ob du das Fenster mit Show() statt mit ShowDialog() anzeigst.

12.09.2014 - 14:06 Uhr

Und außerdem implementiert die Service-Klasse (zumindest im Snippet) das Interface nicht.

22.08.2014 - 20:36 Uhr

Hallo,

in objektorientierten Programmiersprachen gibts so etwas wie "eine Klasse ausführen" nicht. Zum Testen von Klassen lieber auf Unit-Tests zurückgreifen. Die können immer wieder, mit vorgegebenen Parametern und völlig automatisiert ausgeführt werden. Siehe dazu auch [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio.

Grüße

04.08.2014 - 20:51 Uhr

Hallo,

Supports MVVM for suggestions.

DataTemplate for suggestions.

Damit hast du alles was du brauchst, um so eine Liste zu erstellen. Hier ist auch ein kurzes Beispiel, wie man Listeneinträge in WPF gruppieren kann.

Grüße

30.07.2014 - 22:08 Uhr

Hallo,

schau dir mal diesen Artikel an. Das sollte eine ganz gute Grundlage bieten.

Grüße

29.07.2014 - 09:39 Uhr

Das Layouting funktioniert in WPF (zum Glück) nicht mehr so wie bei WinForms. Ich finde es hat eher (entfernt) etwas vom Layouting in HTML. Während Panels in WinForms eher optional (und ein Folterwerkzeug) waren, sind sie in WPF für flexible Layouts eigentlich unumgänglich. Und da kann es durchaus mal vorkommen, dass ein Element einen Container für sich allein hat.

Je nachdem was man erreichen will, benutzt man eben andere Panels, und ich glaube du hast einfach nicht verstanden was ein DockPanel eigentlich macht (ist nicht böse gemeint, Anchor-Property in WinForms != DockPanel in WPF). Möglicherweise wäre ein Grid (mit entsprechenden Row- und ColumnDefinitions) eher das richtige. Dann noch die Width- und Height-Angaben des eigentlichen Elements weglassen und schon sollte es passen. Das Ankern von dem du sprichst, passiert je nach Container eigentlich implizit, ansonsten (eingeschränkt) über die Vertical- und HorizontalAlignment-Properties des eigentlichen Elements.

Schau dir mal das Tool Kaxaml an. Für schnelle, reine Xaml-Sachen ist es sehr gut, weil du kein ganzes WPF-Projekt haben musst, und du siehst das Ergebnis sofort. Ansonsten hilft nur Ausprobieren, daraus Lernen, in der Doku oder im Internet nachschlagen, vergessen wie du deine WinForms gestaltet hast 😉

Grüße

28.07.2014 - 20:33 Uhr

Wenn du willst dass ein Control seinen Container komplett ausfüllt, darfst du keine absoluten Breiten- oder Höhenangaben machen, was du aber mit dem Setzen des Width-Attributs gemacht hast.

Ab und an ein Blick in die Doku kann auch nicht schaden.

Grüße

11.07.2014 - 07:23 Uhr

Wenn es um die Oberfläche an sich geht, hast du recht, die wird hauptsächlich, oder fast nur, mit XAML beschrieben. Und ich persönlich finde das viel besser, da schneller, bequemer, logischer usw. als das mit C# der Fall ist (wie bei WinForms). Und wenn man einige der grundlegenden Prinzipien (SOLID) der OOP verstanden hat und auch durchzieht, ist auch MVVM keine große Sache.
Gruß

04.07.2014 - 12:51 Uhr

Du kannst einen Style für den TreeViewItem-Typ definieren, mit einem EventSetter für das ensprechende Event (PreviewMouseRightButtonDown oder sowas). Im Eventhandler kannst du dann einfach die IsSelected-Property setzen. Diese Paar Zeilen Codebehind sind völlig okay, ist ja View-Code.

20.06.2014 - 12:51 Uhr

Hallo,

erstelle dir für jede Art von Items eine eigene ViewModel-Klasse, dann kannst du für jede Klasse ein HierarchicalDataTemplate bzw. ein DataTemplate erstellen. In diesem Beispiel wird das gezeigt. Ich würde dir auch raten, für deine Daten ebenfalls lieber Klassen zu erstellen, anstatt mit DataSet & Co. zu arbeiten.

14.06.2014 - 18:11 Uhr

Das Stichwort heißt ItemTemplate.

11.06.2014 - 15:26 Uhr

So auf die Schnelle sehe ich, dass du in deiner Form_C3 im Load- und im FormClosing-Handler unterschiedliche Properties der Settings verwendest. Möglicherweise liegt es daran.

Aber ich glaube es wäre ohnehin besser, das ganze neu zu machen. Tu dir dabei selber einen Gefallen und gib deinen Steuerelementen und Klassen sprechende Namen. Achte insbesondere auch darauf, Daten, Logik und GUI auseinanderzuhalten.

04.06.2014 - 20:34 Uhr

Die DataTemplates von ItemControls musst du nicht nochmal in Item-Elemente verpacken. Lass also beim Template das ListBoxItem weg, dann müsste es eigentlich klappen.

26.05.2014 - 14:27 Uhr

Das kann auch gar nicht funktionieren, da du offensichtlich den DataContext nur einem Label zuweist. Wenn das komplette Window diesen DataContext bekommt, sollte es funktionieren. Das hättest du aber auch selber rausfinden können, dazu gibt es Tools wie den WPF Inspector oder Snoop.

25.05.2014 - 13:56 Uhr

Ich verstehe nicht was du für ein Problem mit dem CommandParameter hast, aber setz doch einfach mal einen Breakpoint in deine Execute-Methode bzw. Lambda-Expression, dann siehst du was da ankommt.

25.05.2014 - 03:54 Uhr

Mach das mit dem "Rückgabewert" lieber so, dass der Command eine Property des ViewModels setzt bzw. ein Event auslöst oder was auch immer. "Übergabeparameter" für den Command würde ich jetzt als Property des VMs machen, ich finde dass das oft sauberer ist, als irgendeinen Wert von der GUI zu nehmen.
Dass die Methode vom zweiten Command nicht aufgerufen wird, klingt für mich so, als ob das Binding nicht stimmt, da sollte dir die Debugausgabe mehr Infos liefern.
Gruß

20.05.2014 - 12:35 Uhr

Du musst die ItemsSource-Property setzen. So ist es aber nicht wirklich ein Binding.
Warum machst du so eine komische Operation mit dem DisplayName? Der ist doch schon ein String, den musst du nicht in einen String konvertieren.

15.05.2014 - 20:17 Uhr

Dazu gibt es noch die

WhenInjectedInto<T>

-Methode. So brauchen die Klassen nicht mit Attributen dekoriert werden, was ich persönlich besser finde.
Gruß

14.05.2014 - 17:58 Uhr

Der Button wird erst ausgegraut, sobald ich auf das Fenster klicke oder das Fenster wieder in den Vordergrund gerät.

Hatte das Problem auch mal. Liegt daran, dass du die Methode vom CommandManager nicht auf dem UI-Thread aufrufst. Siehe auch Dokumentation von System.Timers.Timer, der kann nämlich das Elapsed-Event auf einem Backgroundthread auslösen.

Gelöst habe ich es damit, dass meine Basisklasse für die Commands nicht den CommandManager nutzt, sondern das CanExecuteChanged-Event als Weakevent anbietet. So kann ich das Event für jeden Command einzeln im ViewModel auslösen, was ich aber eher als Vorteil sehe.

Grüße