Laden...

Forenbeiträge von Ezio Ingesamt 189 Beiträge

22.01.2016 - 10:06 Uhr

Wenn du das Buch vom Rheinwerk-Verlag meinst:

Ich denke, er meint "Einstieg in Visual C#" auch von Rheinwerk. (siehe 3. Post von Disko)
Die Versionen dieses Buches, die ich in den Händen hielt, haben nur auf WinForms gesetzt.

@Disko: Schau dir wirklich mal "Visual C# - Das umfassende Handbuch" von Rheinwerk an.
Das beschäftigt sich viel tiefergehender mit den grundlegenden Themen (hat aber leider keine Übungen etc. und ist viel theoretischer).

25.11.2015 - 11:59 Uhr

Hallo pata1990,

verstehe ich das richtig, dass du uns nach einem Algorithmus fragst?
Dann verweise ich auf die Stichwörter: Sortieren, Bubble-Sort

25.11.2015 - 11:51 Uhr

Hallo pata1990,
kannst du bitte deine Anforderung, dein Ist- und dein Soll-Stand etwas ausführlicher beschreiben, als in diesem einen verknoteten Satz?!
Eine List of string ist doch schon ein IEnumerable.

VG Ezio

17.11.2015 - 15:29 Uhr

Hallo gokho87,

um dir helfen zu können, musst du etwas präziser dein Problem beschreiben.

ich möchte an der StripMenu ein Menüpunkt "Laden" erstellen und durch klicken dadrauf soll eine openFileDialog öffnen, um eine xml-datei zu laden können.

Du hast ja schon die Hauptpunkte deiner Aufgabe analysiert.
Jetzt brauchst du uns nur noch zu sagen, bis wohin du gekommen bist bzw. wo du nicht weiterkommst.
Zusätzlich solltest du uns auch sagen, was dein konkretes Problem an der Stelle ist.
Eventuell ein bisschen relevanter Code dazu.

Und vorsorglich: Was du sicher hier nicht bekommen wirst, ist ein Stück Code! (siehe [Hinweis] Wie poste ich richtig? 4. und 4.2)

VG Ezio

17.11.2015 - 08:37 Uhr

** roll.pruefePasswort(passwort) = false;**

Die Zeile macht keinen Sinn, wie LaTino beschrieben hat.
Was ist eigentlich das Ziel für diese Zeile?

04.11.2015 - 08:09 Uhr

Hallo Maggie123.

[...]ich arbeite noch nicht lange mit C#[...]

Ich hoffe du nimmst mir meine Gegenfrage nicht übel:
Meinst du wirklich Klassen oder meinst du Instanzen (einer Klasse) bzw. Objekte?

Vielleicht macht es auch Sinn, wenn du dein zugrunde liegendes Problem beschreibst, weshalb du meinst mehrere Klassen zur Laufzeit zu erstellen.
Es könnte auch eine Option sein mit Generics zu arbeiten (openbook: Visual C# Generische Datentypen).

VG Ezio

07.10.2015 - 07:56 Uhr

Hallo nullbytes,

1.) schau dir wirklich nochmal [Artikelserie] SQL: Parameter von Befehlen an.
Besonders "Problem: Wie verhindere ich SQL-Injection" und das direkt angeschlossene Kapitel "Lösungsweg".
Dann weißt du auch, warum es hier den Profis die Fußnägel kräußelt.

2.) zu deiner 2. Lösung: Wenn du nur ein Return hast und dieses "0" zurückgibt, warum solltest du einen anderen Wert als "0" erwarten können? 😉

29.09.2015 - 13:22 Uhr

... und wie fügst du die Zeilen ein?
Wenn jede Zeile einen Datensatz repräsentiert, also hinter dem dynamischen Grid eine ObservableCollection steht, kannst du einfach das jeweilige Objekt aus der Liste löschen.

28.09.2015 - 13:27 Uhr

Du bist mit Array-Länge und größtem Index durcheinander gekommen:


array.MaxIndex == array.Length - 1

25.09.2015 - 14:37 Uhr

@Fzelle: Die Antwort ist Quatsch mit Soße -

Auch wenn ich verstehen kann, dass die Antwort von FZelle nicht deine Frage direkt trifft, so ist aber deine Reaktion unangemessen.
FZelle hat recht, wenn er dir sagen will, dass die Denkweise für WinForms und WPF/MVVM komplett unterschiedlich sind.
Erfahrungen in WinForms sind oft sogar hinderlich, wenn man sich in WPF/MVVM reindenken muss.
Und ob man nun WinForms oder WPF bevorzugt ist neben Anforderung des Chefs oder der Kunden und dem Wissen dass WinForms immer mehr als veraltet gilt einfach auch Geschmackssache.
Über letzteres zu Diskutieren führt am Ziel vorbei.

-Edit: Eindeutigkeit des ersten Satzes angepasst.

25.09.2015 - 08:16 Uhr

Hallo mpeter,

du baust eine WinForms-Anwendung und nutzt das Standard WinForms chart-Control?
In dem Falle wäre die Series aus dem falschen Namespace.
Die müsste aus System.Windows.Forms.DataVisualization.Charting kommen.

An deiner Stelle würde ich das VS auf Englisch stellen, damit du die englischen Fehler bekommst. Da findet sich mehr und du brauchst nicht übersetzen.

Ezio

24.09.2015 - 12:02 Uhr

Ein VM existiert somit, jedoch nicht auf die Art und Weise, dass es für WPF optimiert ist (ICommand).

Da liegt ja dann der Hase im Pfeffer begraben.

Die Möglichkeit einiges erst zur Laufzeit zu testen schreckt mich manchmal ab.

Also, soweit meine Erfahrung geht, machst du dann was grundlegend falsch.
MVVM erzwingt ja eine ordentliche Trennung UI <-> BL+DAL, gerade damit man gut testen (UnitTests) kann.
Oder reden wir an einander vorbei?

23.09.2015 - 14:00 Uhr

@p!lle: Nö, ich habe mich nur blöd bzw. ungenau ausgedrückt.

23.09.2015 - 13:27 Uhr

Hallo Austrianman,

probiere mal, ob es evtl. am Screenshot liegt.
Also einfach mal die PrntScr- bzw. Druck-Taste benutzen.
Screenshots sind meist recht schlecht aufgelöst.

Wenn es wirklich daran liegt, wäre eine Idee eben keinen Screenshot zu drucken, sondern die Daten direkt.

21.09.2015 - 14:24 Uhr

Übliche Vorgehensweise wäre die Abhängigkeit in Code umzusetzen.
Beispielhaft:

  
if (aktiv)  
{  
Button1.Enabled= true;  
Button2.Enabled= true;  
  
}  
  
else  
{  
Button1.Enabled = false;  
}  
  

Ja, aber nicht so.
Nutze MVVM resp. CommandBinding.
Dann hast du RelayCommands, die als 1. Parameter ein Delegat für die Funktion, die Hinter dem Button steckt, und als 2. Parameter ein Delegat besitzen, der Überprüft, ob der Button aktiviert sein darf.

VG Ezio

18.09.2015 - 13:39 Uhr

Hallo Gogeta,

du versuchst eine Umwandlung .pdf -> byte[] -> .jpg/.png/... ?
Wenn ja, dann bist du auf dem falschen Weg.
Denn: Ja, Bilder und PDF-Dokumente sind komplett was anderes.
Grob erklärt:
Bei Bildern speicherst du, auf welchem Pixel welcher Farbwert liegt.
Bei PDF speicherst du Elemente (Schrift, Formen, Bilder, ...) und deren Eigenschaften (Größe, Position, Farbe, ...).
Ist es wichtig, dass du über einen Byte-Array gehst, oder war das nur eine Lösungs-Idee?

EDIT: Lies mal MSDN: how to open a page from a pdf file in picturebox in c#.
Das sollte dein Thema treffen und war in 10 sec googeln gefunden.

17.09.2015 - 15:36 Uhr

Hallo LaIgeriano,

zu 3. könnte dich [Artikel] Strings verketten: Performance-Betrachtung interessieren.

zu 5. zu dem, was DerKleineTomy geschrieben hat:
"null" bedeutet, dass deine Variable auf keinen Speicherbereich verweist und somit gar keinen Wert haben kann.
"" bzw. string.Emty bedeutet dagegen, dass die Variable auf einen Speicherbereich verweist, der eine leere Zeichenkette bzw. eine Zeichenkette der Länge 0 enthält.
Ist genauso ein Wert wie bei int die Zahl 0.
[FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik) Könnte dich dazu interessieren.

16.09.2015 - 15:32 Uhr

Kurz zur Richtigstellung "Einstieg in Visual C# 2013" ist NICHT der Nachfolger von "Visual C# 2012 Das umfassende Handbuch".
Ja, es ist für unterschiedliche Studio Versionen, aber die Entwicklungen sollten einem Anfänger nicht interessieren.
Das erste Buch ist ein Einsteigerbuch mit vielen Übungsaufgaben. Das zweite Buch ist dann für den deep dive.
Am Anfang muss man einen Tot sterben: *Konsole ist "nicht schön", *wenn man mit WinForms lernt, bekommt man eine immer mehr veraltende Technik gezeigt, wobei die Bücher einem nicht die Trennung von Oberfläche und Logik zeigen, ist aber dafür einfach *WPF ist gut und mächtig, sollte aber nur in Verbindung mit MVVM erlernt werden, große Einsteigerhürde.

Da du das Einsteiger-Buch hast, brauchst du es nicht in die Ecke werfen. Nimm es und lern.
Merke dir aber, dass du, wenn du mit dem Buch durch bist, keinen guten Umgang mit WinForms gelernt hast.
So wie die das zeigen reicht das für einen blutigen Anfänger, würde man aber später niemals machen.
Weiterhin solltest du dann "Das umfassende Handbuch" einmal von vorn bis hinten durcharbeiten.
Wenn du das alles kannst, bist du schonmal gut gerüstet.

16.09.2015 - 14:31 Uhr

Also egal mit welcher Oberflächen-Technologie du arbeitest, die Sprache ändert sich nicht.
Aber die Art und Weise, wie du mit dem Nutzer kommunizierst ist total unterschiedlich.
Eine textbasierte Konsolen-Applikation funktioniert ganz anders als eine grafische Oberfläche.
Aber jede grafische Oberflächen-Technologie erfordert auch einen unterschiedlichen Umgang.
Ich weiß jetzt nicht, wie viel C# man können muss, um überhaupt mit Unity was machen zu können, aber IMO sollte man gleich die Sprache richtig lernen.
Und wenn man dann die Sprache beherrscht, ist es auch egal welche konkrete Oberfläche man einsetzt, da man das Sprachwissen besitzt und sich nur noch in die Oberflächen-Technologie einarbeit muss.
(Und falls du Unity mit dem Buch von Carsten Seifert lernst, ist dort ein Crash-Kurs drinnen. Da aber das Buch dünner ist, als eine gutes C#-Handbuch, wird es auch nur ein sehr beschränktes Sprachwissen vermitteln können.)
Ob du nun mit Konsole oder WinForms anfängst, ist Geschmackssache und es gibt Für und Wider.
Ich würde aber erst auf Konsole anfangen und dann später WPF (mit MVVM) nehmen und WinForms tot in der Ecke liegen lassen.

14.09.2015 - 15:23 Uhr

Zusammengefasst ist der Sinn von .Value, dass du bei direkter Verwendung der Variable deren Typ (also T?) hast. Möchtest du aber den "eigentlichen" Werttyp (also T) verwenden, musst du .Value aufrufen.


int? myNullable = 3;
int myInt = myNullable; //Fehler!
int myInt2 = myNullable.Value; //OK, falls != null. Sonst Exception.

int myInt3;
if(myNullable.HasValue)
{
myInt3 = myNullable.Value;
}

Aber das könnte man alles in der Doku usw. nachlesen.

28.08.2015 - 15:05 Uhr

Hallo Andreas,

danke für deine Mühen.
Dein C# Button finde ich super!
Die beiden anderen ... ich verstehe was du meinst, sehe aber keinen Mehrwert (höheren Erkennungsgrad).

Hallo LaTino,

wenn man einmal den Hilfeknopf als "Link zu allen möglichen Formatierungsbefehlen" wahrgenommen hat, braucht man die ganzen Buttons doch garnicht!?!
IMHO kann der Editor bleiben wir er ist, da die einen den Editor bedienen können/wollen und die anderen die Tags nutzen. (und die ganz anderen lassen die Admins ihre Posts designen 😁 )

Hallo in die Runde,

mein Hauptkritipunkt an dem Hilfeknöpfchen (der Grund warum ich lange nicht darauf geklickt habe!) ist, dass er so wirkt, als ob es die Hilfe zu der Optionenzeile <Font> <Size> <Color> wäre - und dafür brauche ich nun wirklich keine Hilfe 😉 .
Mein Vorschlag wäre deshalb eine Zeile "Liste aller Code-Tags" zwischen der Editormodus-Wahl und der FAQ-Link-Zeile oder über der rechten Spalte (aktuelle / alle tags schließen) einzufügen.

VG Ezio

26.08.2015 - 16:34 Uhr

Hallo LaTino,

das mit dem deutlicheren Hinweis sehe ich auch so.
CSHARP und CODE gibt es schon als Buttons.
Ich bin der Meinung außer die Überarbeitung des Hilfe-Knopfes ist keine Überarbeitung notwendig.

VG Ezio
Nö, ein wenig vergurkt, aber man kann es verstehen. 😉

25.08.2015 - 08:29 Uhr

Im Prinzip wie der Windows Rechner, nur halt mit den einfachsten Rechenarten.

Im Prinzip ist das aber NICHT so wie der Windows Rechner (zumindest ab Win7).
Dieser führt auch nur Berechnungen von 2 Operatoren aus, solange man nicht mit Klammern oder anderen komplexen Operatoren arbeitet.
Gerade wenn es um simple Operatoren geht, bildet der Rechner zuerst aus den ersten beiden Eingaben das Zwischenergebnis und bildet aus diesem Zwischenergebnis und der nächsten Eingabe das Zwischenergebnis usw.
Angezeigt wird dann oben z.B. 1+2+3+4 aber im Eingabefeld steht immer das aktuelle Zwischenergebnis (also 3 bei 1+2) solange du keine Eingabe für den nächsten Operator getätigt hast.
Wenn du aber alles "in einem Rutsch" berechnen möchtest, wäre der Ansatz von hummingbird1 zu benutzen.

Ezio

19.08.2015 - 14:51 Uhr

Hallo Lalgeriano,

ich möchte dir noch mit auf den Weg geben, das OpenBook Visual C# parallel zu lesen oder zumindest als Nachschlagwerk zu nutzen.
Da gibt es z.B. eine schöne Tabelle der einfachen Datentypen.

VG Ezio

03.07.2015 - 11:05 Uhr

Auch wenn ich dir leider bei DirectX nicht helfen kann, ein kleiner Hinweis.
Ich denke, dass es den wissenden Helfern helfen kann, wenn du konkrete Fragen stellst. (Siehe auch [Hinweis] Wie poste ich richtig? Punkt 5) 😉

Edit: Hinweis No. 2: Verwende usings um gezielt Objekte zu erstellen und zu zerstören.

03.07.2015 - 08:50 Uhr

Auch wenn es im ersten Moment müsig erscheint und dir auch nicht direkt bei deinem Problem hilft*, ist für mich "binden" was anderes.
Du übergibst aktiv die Daten deinem GridView.
Würdest du "binden", würde dein GridView die Datenquelle, also die Property einer anderen Klasse kennen. Wenn diese sich ändert, holt sich das GridView die Daten.
Insgesamt sieht mir das nach einem nicht optimalen Design aus (Mischung von Präsentation und DAL). Siehe dazu [Artikel] Drei-Schichten-Architektur
Und schau dir mal MVVM an.

EDIT *: Es bietet keine Antwort auf deine direkte Frage, würde dir aber bei deinem Problem helfen ... .

03.07.2015 - 08:30 Uhr

Hallo schuppsl,

  1. Wenn du dir das Objekt Standort zusammenbaust und dies in einer Spalte anzeigen lassen willst, was soll das GridView tun?
    Genau, es ruft die ToString()-Methode. Und da diese nicht weiß, was sie anzeigen soll von deiner Klasse (es sei denn du überschreibst die Methode) zeigt sie (oh jetzt fehlen mir die Begriffe - ich meine aber) die Objektstruktur an.
  2. Du kannst dir die Standortbezeichnung anzeigen lassen, indem du auf die Standort.Bezeichnung bindest.
  3. "per linq binden"? Lädst du nun die Daten aktiv in dein GridView (!= Binden) oder holt sich das GridView die Daten?
    (4. [Hinweis] Wie poste ich richtig? Punkt 7)

VG Ezio

02.07.2015 - 15:15 Uhr

Aufgrund der häufigen Verweise auf diesen Artikel möchte ich noch anmerken, dass das openbook: Visual C# vom Rheinwerk-Verlag dieses Thema auch behandelt.
Kapitel 7: Fehlerbehandlung und Debugging beinhaltet Kapitel 7.3: Fehlersuche mit Visual Studio [...].
Vielleicht hilft dem einen oder anderen die andere Art der Formulierung weiter.

VG Ezio

26.06.2015 - 11:35 Uhr

Du weißt doch noch garnicht wo wirklich dein Fehler liegt! - oder erzählst du uns nur die Hälfte?!
Oder kannst du sagen, WARUM du NULL bekommst?

denn es funktionierte ja mal

Kannst du vielleicht dann auch verraten, was du geändert hast oder anders machst?

26.06.2015 - 11:19 Uhr

Nur "Wie mach ich das? Wie löse ich mein Problem?" ist eine so allgemeine Frage, dass hier im Forum dir nur mit [Hinweis] Wie poste ich richtig? geantwortet werden kann.
Deine Aufgabe ist es ein konkretes Problem fest zu stellen und dann hier - falls du nicht weiter kommst - konkret eine Frage zu stellen.
"Mein Auto ist kaputt, mach mal ganz!" kannst du in der Autowerkstatt bringen. Nur wenn du selbst der Automachaniker bist, kommt das blöd ... . 😉

26.06.2015 - 07:44 Uhr

Hallo IxF,
hast du schon den Debugger angeschmissen?
Ich denke, da sollte dir klarer werden wo es hängt.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

24.06.2015 - 13:33 Uhr

Die Fehlermeldung sagt doch schon, was du tun musst.
Oder wo liegt jetzt das Problem?
MSDN: How to: Add and Remove References in Visual Studio

24.06.2015 - 07:57 Uhr

Hallo gh0st93,

Klar, dass dies nichts mit mvvm zutun hat. Wie schon gesagt hatte ich nur Probleme in der Liste die Daten auf der DB anzugeben.
[...]
Wie gesagt ich pack alles wirst in den code-behind verzichte für s erste auf das pattern schau mir noch einige Grundlagen tut's an und eigne mir das mvvm zu einem späteren Zeitpunkt ein.

Das ist irgendwie sehr wiedersprüchlich.
An sich warst du am Anfang dieses Themas ja schon in die richtige Richtung unterwegs.
Bezüglich Listen: Schaue dir mal OpenBook C# Kapitel 9 mit Schwerpunkt Kapitel 9.9 an.
Zusätzlich ist für dich auch der Listentyp ObservableCollection<T> wichtig.
Sieh dir zu beidem bitte auch unbedingt die MSDN-Seiten an.

So, nun konkreter.
In deinem VM hast du eine ObservableCollection<PersonModel>.
(Auf diese bindest du in der View.)
Diese füllst du im Konstruktor oder in einem Command mit Hilfe einer Repository-Klasse.
Diese Klasse ist die eigentliche Verbindung zur DB.
Man könnte ihr im Konstruktor alle wichtigen Infos für den Verbindungsaufbau übergeben und eine Funktion Get() einrichten, die die Personen von der DB läd, eine List<PersonModel> erstellt und zurück gibt.
Dann brauchst du nur noch im VM die Liste zu einer OC machen und fertig.

Wie du siehst hat die Beschaffung der Daten nix mit dem VM zu tun.
Theoretisch könntest du dir die Daten ganz anders beschaffen.
Wenn du für das Repository ein schönes Interface baust, kannst du am Ende sogar das Repository austauschen und die Daten z.B. aus ne XML-Datei holen ohne eine Zeile Code im "MVVM-Bereich" deiner Anwendung zu ändern.

VG Ezio

23.06.2015 - 14:20 Uhr

Oh ja, hehe: && und || sind logisch, & und | sind bitweise.

Edit: ... und was mir gerade noch so auffällt:
Übersehe ich was oder macht die generische Methode eigentlich keinen Sinn, da du ja eh in einen UInt32 castest?!

23.06.2015 - 13:31 Uhr

Es kommt natürlich drauf an, wie du schreibst.
Wenn du knallhart das Byte setzen willst, geht das natürlich schief.
Wenn du es machst wie zommi es gezeigt hat, dann nicht.

23.06.2015 - 11:51 Uhr

Naja ein Nibblet hat ja einen dezimal Wert von 0...15.
Wenn du sicherstellst, dass der übergebene Wert in diesen Grenzen liegt, änderst du nur 1 Nibblet.

EDIT: Wertebereich angepasst. 😁

23.06.2015 - 11:36 Uhr

Hallo ZaHaDum1984,

wo hängt es genau?
Denn deine Hausaufgaben sind für dich da und wir machen sie dir nicht! (siehe [Hinweis] Wie poste ich richtig? Punkt 4 und 4.2)

17.06.2015 - 10:35 Uhr

Schau dir mal das Behälterproblem an.
Ich glaube das trifft es eher.

16.06.2015 - 16:34 Uhr

Kannst ja auch mal bei der IHK an deinem Standort nachfragen, ob es Richtlinien o.ä. gibt.
Wenn nicht, gibt es meines Wissens nach auch keine Normen, die sich direkt mit Präsentationen auseinandersetzen.
Natürlich gilt die DIN5008 für Texte.

15.06.2015 - 13:28 Uhr

Kennst du schon (Relay-)Commands? https://msdn.microsoft.com/de-de/magazine/dd419663.aspx#id0090030

Ich frage mich, ob ein Dictionary<int, ObservableCollection<myClass>> eine so günstige Lösung ist, wenn du eh nur einen bestimmten Wert brauchst.
Kanns du nicht schon beim Anlegen des Dictionary-Datensatzes bestimmen, welchen Wert du referenzeieren möchtest?

11.06.2015 - 16:29 Uhr

Kurz Kroax hat recht.
Lang:

Eine override-Methode stellt eine neue Implementierung eines von einer Basisklasse geerbten Members bereit. Die durch eine override-Deklaration überschriebene Methode wird als überschriebene Basismethode bezeichnet. Diese muss dieselbe Signatur wie die override-Methode aufweisen.

Die Signatur einer Methode besteht aus dem Namen der Methode sowie dem Typ und der Art (Wert, Verweis oder Ausgabe) aller ihrer formalen Parameter von links nach rechts. Die Signatur einer Methode beinhaltet ausdrücklich weder den Rückgabetyp noch den params-Modifizierer, der für den am weitesten rechts stehenden Parameter angegeben werden kann.

11.06.2015 - 15:46 Uhr

gfoidls Hinweis bringt mich aber zumindest zu einem Ansatz (auch wenn ich keine Garantier für Eleganz und Effizienz gebe):1. nach dem Rucksack-Prinzip alle möglicken Kombinationen suchen

  1. die Kombinationen herausfiltern, die den Schwierigkeitsgrad erfüllen (evtl. mit Toleranz)
  2. aus diesen per Zufall eine Kombination wählen
  3. der Kombination entsprechend zufällig Daten von DB laden
11.06.2015 - 12:11 Uhr

Also wenn du das Buch nur wegen des Pattern kaufst und (was man ja noch nicht sagen kann) der Abschnitt nicht besser wird als im open book, dann würde ich mir mal lieber das neue Entwurfsmuster Buch von Rheinwerk ansehen.
Das sind wenigstens 14 Seiten.
@Palin: Wenn du es schon angesprochen hast: Welches Buch hast du zu MVVM?

11.06.2015 - 11:39 Uhr

Den fachlichen oder zeitlichen Aspekt möchte ich nicht mit rein bringen.
Das muss sich der Nutzer bei der Eingabe der Fragen überlegen 😉

Hm ... dann hoffe ich nur, dass das ein Übungsprojekt o.ä. ist.
Denn ohne Betrachtung dieser Aspekte, kann man nicht wirklich sinnvoll eine Klausur automatisch generieren.
Ich bin zwar kein Lehrer, denke aber dass das Erstellen einer Klausur etwas komplexer ist als zufällig ein paar Fragen mit unterschiedlichen Punkten zusammen zu würfeln.

11.06.2015 - 11:31 Uhr

Hallo gh0st93,

mehr als jetzt gesagt wurde, besagt das MVVM-Pattern auch nicht.
Es sagt im Grunde nicht: "Benutze Bindings." oder "Benutze (Relay)Commands.".
Das sind technische Details, die von Sprache und Technologie abhängig sind und gerade bei C# und WPF Sinn machen.
Patterns sind Prinzipien. D.h. es gibt nicht unbedingt DIE allgemeingültige oder beste Lösung.
Deshalb wird wahrscheinlich jeder das Pattern etwas anders umsetzen.
Dass das verwirrend und schwierig für Anfänger ist, kann ich sehr gut nachvollziehen.
MVVM ist "nur" eine Vorgehensweise deinen Code sauber, übersichtlich, wart- und testbar zu gestalten.

D.h. aber auch, dass dich niemand verpflichtet MVVM 100%ig, grundsätzlich und korrekt einzusetzen.
Es ist ja keine Norm.
Aber gerade als WPF/MVVM Anfänger sollte man die vorangehenden 2 Sätze nicht(!) berücksichtigen.

Bezüglich Fenster und MVVM scheint eine (nicht modale) Ein-Fenster-Anwendung die "beste und einfachste" Lösung zu sein.
Das heißt ja am Ende nur, dass du verschiedene Bereiche (UserControls) hast, die entsprechend an einen unterschiedlichen Datenkontext gebunden sind und per DataTemplate eine entsprechend andere View zeigen.

Ich denke dein Gedanke den Login-Teil extra zu behandel ist eine gute Idee.

11.06.2015 - 09:21 Uhr

Die Frage ist auch, ob du die Klausur mit homogenem Schwierigkeitsgrad erstellen willst (-> einfach).
Meine Erfahrung über die Jahre zeigt aber, dass Lehrende so nie eine Klausur erstellen.
Und wenn man nur den druchschnittlichen Schwierigkeitsgrad vorgibt, dann ist die Sache nicht mehr trivial.

Du solltest auch beachten, dass eine Aufgabe zwei Schwierigkeitsgrade hat: den fachlichen und den zeitlichen.
Wobei ersterer fest ist und der zeitliche dynamisch anpassbar.
(100 einfachste Kopfrechenaufgaben in 5 min richtig zu lösen, ist denke ich auch nicht mehr "einfach" ...)

11.06.2015 - 08:30 Uhr

Hallo gh0st93,
im Großen und Ganzen sieht es gut aus.
Es gibt aber Ungenauigkeiten, Problemchen und Ergänzenswertes:*Das Beispiel Login-Maske ist unglücklich gewählt, da gerade dies einen Sonderfall darstellt, der meines Wissens nach das MVVM-Pattern aus Sicherheitsgründen bricht (Passwort darf ja nicht im Klartext im RAM oder sonst wo stehen).

  • ViewModel - ungenau: Du zeigst keine Controls an. Du stellst Daten bereit, die man u.U. dazu nutzen könnte Controls ein- und auszublenden. Das ViewModel hat aber keine Ahnung, dass eine View existiert. *ViewModel - ergänzenswert: Das VM stellt neben Logik natürlich auch Properties bereit, die das Model ergänzen, jedoch nur um ansichtsspezifische, nicht im Datenmodell notwendige oder sogar implizit enthaltene Daten bzw. bereitet die Daten besser auf. (z.B. Model.List -> VM.ObservableCollection) *Model: Abgesehen von dem in Punkt 1 angesprochenen Problem ist es schwierig in diesem Kontext von TextBoxen zu reden, da ja das Model nun überhaupt keine Ahnung hat wie, wo und wann es angezeigt wird. Es könnte genauso gut eine Konsolen-Anwendung sein, durch die das Model visualisiert wird.
  • Wenn man mal vom reinen MVVM ausgeht, dann darf das Command kein neues Fenster starten - zumindest nicht direkt (denn dazu müsste ein VM ein UI Element direkt kennen!). Bin mir gerade nicht sicher, aber meine, dass das höchste der Gefühle wäre ein ViewModel zu instanziieren. Aber das ist ein weites Feld und ohne FrameWork wird es spätestens hier knifflig das Pattern nicht zu brechen.

Anfangs finde ich es wichtig möglichst nah sich am Pattern zu halten - und wenn möglich - erstmal solche Sonderfälle, wie Passwort oder andere, die einen Bruch des Patterns zur Folge haben, weg zu lassen oder anders zu lösen.
(Geht natürlich nur in privaten und Testprojekten.)

VG Ezio

09.06.2015 - 13:40 Uhr

Hallo CHRRP,
wenn ich dich richtig verstanden habe, möchtest du Werte, die du in ComboBoxen festgelegt hast, an anderer Stelle weiterverwenden.
Du solltest ja auch in WinForms GUI, Daten und Logik trennen ([Artikel] Drei-Schichten-Architektur).
Deshalb solltest du (im besten Fall durch Bindung) den Datenmodellen die ausgewählten Werte zuweisen und kannst die Daten an anderer Stelle wieder rausholen und wieder anzeigen bzw. weiter verarbeiten.

03.06.2015 - 10:43 Uhr

Hallo BlackMatrix,

was ist dein Problem.
Das, was ich sehe, dürfte nur die Besonderheit haben, dass es eine "OneWayToSource"-Binding ist.

VG Ezio

26.05.2015 - 09:31 Uhr

Hallo wickedcsharper,

Angenommen ich habe eine zusammengesetze Schwingung aus mehreren Frequenzen, dann zeigt mir das FFT Diagramm also die Amplituden der Frequenzen, aus denen die Gesamtschwingung zusammen gesetzt ist ?

Jain. Bei der Fourier-Transformation geht man davon aus, dass jedes Signal aus einer Überlagerung (bis hin zu unendlich vieler) sinusförmiger Schwingungen besteht.
-> Außer den einfachen Signalen die sinus- oder cosinusförmig sind, sind alle "zusammengesetzt".
D.h. die FFT von Sinus- und Cosinussignalen ergibt die Signalamplitude an genau der Frequenz der Schwingung.
Alles andere ist dann eben etwas komplizierter. 😉
Gerade die Folge 1 0 0 ... ist ja kein kontinueriliches und periodisches Signal mit steiler Flanke.
Das ergibt dann eine unendliche Folge (die aber zur Vereinfachung abgebrochen werden kann -> ergibt dann nur je nach Abbruchstelle unterschiedlich große Ungenauigkeiten).
Somit ein recht schlechtes Anfangsbeispiel.

Was du beachten solltest -> deine Verarbeitung am PC allgemein und deine Abfrage alle 10ms im Speziellen stellt eine Abtastung dar.
Da musst du das Abtasttheorem einhalten. fa > 2*fg
(Abtastfrequenz > 2 * höchste im Signal vorkommende Frequenz)
Anderen Falls bekommst du den Alias-Effekt.
fg kann man festlegen, in dem man f > fg wegfiltert. Oder der Sensor hat ein fg (z.B. aufgrund seiner Trägheit) -> Datenblatt.

VG Ezio