Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Fr 29.08.14 15:06 
Schau dir mal HTML an.

Ich finde, WPF hat ein paar Ähnlichkeiten zu HTML - zumindest was die Flexibilität angeht.
WPF ist darüber hinaus um Welten mächtiger und kann frei erweitert und verändert werden.

Aber wenn du das Konzept einmal verstanden hast, wirds auch einfacher.
Diese Hürde ist das Schwierigste dabei, der Rest baut darauf auf.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 29.08.14 15:20 
Zitat:
Zum Thema Terminate/Abort habe ich was beizusteuern. "Terminate" ist im Englischen das "Beenden" und somit nach meinem Verständnis das saubere Verlassen eines Threads. "Abort" dagegen ist das "Abbrechen", ergo das knallharte "Bullet-into-Head" des Threads. Da liegen unsere Namen also voll im Trend ;)


Öh ... Ähm ... tja dann dient es zumindest noch als gutes Beispiel dafür das Lesbarkeit unter anderem von den Vorerfahrungen abhängt :angel:
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 08.09.14 10:19 
Nach einigen Wirren ist das georderte Buch zum Thema WPF tatsächlich mal eingetrudelt ;) Nachdem ich die Hälfte davon gelesen habe, bin ich wirklich beeindruckt. Man kann mit WPF echt allerhand anstellen und dabei ist nicht nur die Trennung GUI <-> Code gemeint, da gehört auch das einfache "Ich kopier das mal aund dann läufts im Web". Völlig undenkbar mit WinForms.

Ich bleibe da auf jeden Fall dran, IMHO ist das wirklich lohnenswert. BTW, das Buch ist "Einstieg in WPF 4.5 - Grundlagen und Praxis" von Galileo Press - falls das jemand interessieren sollte. Kein Geschwafel zum Thema "Un nu stelle mer uns janz dumm und sajen: Det is n Gombjudah !", also keine hundert Seiten mit Downloadbeschreibungen der verschiedenen Browser und dann einer endlosen Installationsanleitung etcpp. Gleich ans eingemachte und dann im Stil: "Wir haben hier dieses Feature, damit kann man bla machen und so sieht das aus: [Code here]".

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 14.09.14 12:30 
Noch ein Tipp:

Mit WPF lässt sich sehr gut MVVM nutzen, in dem Zuge ist auch das DataBinding sehr einfach geworden.
Du kannst - kurz gesagt - an alles binden, es funktioniert :D
Das sieht dann so aus, dass du eine Klasse erstellst, die INotifyPropertyChanged implementieren muss.
Dort kannst du dann Properties deklarieren, an die du binden kannst. So würde ich dir z.B. empfahlen, Commands zu verwenden. Das sind Typen, die ICommand implementieren und damit die Methoden Execute und CanExecute besitzen.

Du kannst auch an Ressourcen binden und dort deine Anzeige-Strings ablegen.


Es gibt auch zwei Klassen, die ich immer in mein Projekt aufnehme: ViewModelBase und RelayCommand
Nicht unbedingt in der Form, aber ViewModelBase nimmt mir z.B. die Aufgabe ab, immer extra in jeder Property OnPropertyChanged aufzurufen. Das schrumpft dann auf ungefähr folgendes zusammen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private string _myName;
public string MyName
{
    get { return _myName; }
    set { base.SetValue(() => MyName, ref _myName, value); }
}


Der erste Parameter ist eine LINQ-Expression, mit der du eine ganze Reihe Informationen über Lambda-Ausdrucke und den dort verwendeten Membern erhalten kannst. Es ist eingeschänkt, es kann nicht alles als Expression benutzt werden, aber zum Abfragen der PropertyInfo und damit dem Namen funktioniert das wunderbar. Expressions sind ein umfangreiches Thema, aber wer sich da einmal zurecht findet, kann damit eine ganze Menge machen. Gerne kann ich auch noch eine Methode posten, die die PropertyInfo abfragt. Ich nutze zur Zeit aber immer die Variante mit dem CallerMemberName, das ich in meinem nächsten Beispiel verwende.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
public string MyName
{
    get { return GetValue(); }
    set { base.SetValue(value); }
}


Das ist die zweite Variante, die ich gerne nutze, da so die Felder weg fallen, die werden in einem Dictionary in der ViewModelBase gehalten.
Hier habe ich ein kleines Feature vom Compiler genutzt, das wäre die Implementierung von SetValue:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
protected virtual void SetValue<TProperty>(TProperty newValue, [CallerMemberName] string propertyName = "")
{
    var currentValue = _propertyValues[propertyName];

    if (!currentValue.Equals(newValue))
    {
        _propertyValues[propertyName] = newValue;
        OnPropertyChanged(propertyName);
    }
}


propertyName ist immer der Name des aufrufenden Members - in meinem Fall die MyName-Property.


Commands lassen sich genauso im ViewModel halten - als Property.
Einfach die oben verlinkte RelayCommand-Klasse nutzen (oder ICommand überschreiben) und das Objekt als Property anbieten und daran binden. Wenn CanExecute mal false zurück geben sollte, dann wird das Control ausgegraut, die Methode wird nämlich vom Dispatcher permanent aufgerufen.
Wenn du Commands nutzt, kannst du auch die Events weg lassen und die Klasse hinter dem Window ist komplett leer. Du brauchst dann auch keine Namen den Controls geben.



Dieser Beitrag ist die zweite Hälfte eines Beitrages, den ich auf Wunsch von user profile iconChristian S. zu Gunsten der Ordnung des ursprünglichen Threads abgetrennt habe. Die erste Hälfte des Beitrages befindet sich hier.

Für diesen Beitrag haben gedankt: Christian S.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 14.09.14 13:00 
Um die INotifyProertyChanged-Implementation zu vereinfachen, gibt es eine Menge von Hilfsmittel (Libraries), welche einem die händische Arbeit abnehmen - diese habe ich im Beitrag MVVM Paradigma aufgelistet.