Invoke

  • WPF

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von faxe1008.

    @nafets3646
    Wie oft siehst du hier im Forum Threads, in denen der TE Probleme hat, weil er Daten in irgendwelchen ListBoxen, ListViews oder DataGrids speichern will, und dabei dann auch noch untypisiert arbeitet?
    Dem macht MVVM ein Ende, denn man wird praktisch gezwungen, Datenverarbeitung und GUI getrennt voneinander zu entwickeln.

    VB.NET-Quellcode

    1. xmlns:local="clr-namespace:SomeNamespace"
    2. DataContext = "{x:Static local:SomeViewModel.Instance}"


    SomeViewModel wäre meine Klasse und die statische Eigenschaft die Value. Und wozu bruach ich dann noch einen extra Namespace?

    8-) faxe1008 8-)
    @nafets3646:
    @faxe1008:
    MVVM = Model View ViewModel
    Das heißt, dass das ViewModel beides trennt. Also Model und View bzw. Daten und GUI.
    Dann ist man gezwungen mit Binding zu arbeiten, sodass alles über ein Event einer bestimmten Schnittstelle geregelt wird und das ViewModel somit dem View dies mitteilt.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ja ach nee, nur sehe ich nicht wirklich einen Sinn darin, um auf eine Property an einem Control eine Property zu erstellen. Die Logik ist ja dann folgende:

    Quellcode

    1. (Codebehind > Property) > (Property > Objekt)
    Ich sehe darin nur ne Verkomplizierung, vor allem da der Zugriff vom Codebehind auf die Property ja trotztem möglich. Und die Begründung mit dem "GUI von Daten trennen" heißt ja auch nicht unbedingt, dass man das MVVM-Pattern benutzen soll, man kann das Zeug ja auch so trennen, wie es in WinForms ja auch geht.

    VB.NET-Quellcode

    1. <Controls:MetroWindow x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    5. Title=".NET FileCopier" Height="350" Width="648.674" xmlns:local="clr-namespace:PropertyClassNamespace" DataContext="{x:Static local:PropertyClass.ProgressValue}">


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Namespace PropertyClassNamespace
    3. Public Class PropertyClass
    4. Implements INotifyPropertyChanged
    5. Public Event PropertyChanged As PropertyChangedEventHandler _
    6. Implements INotifyPropertyChanged.PropertyChanged
    7. Private Sub NotifyPropertyChanged(ByVal info As String)
    8. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    9. End Sub
    10. Dim processValue As Integer = 0
    11. Public Property ProgressValue As Integer
    12. Get
    13. Return processValue
    14. End Get
    15. Set(value As Integer)
    16. If processValue <> value Then
    17. processValue = value
    18. NotifyPropertyChanged("ProgressValue")
    19. End If
    20. End Set
    21. End Property
    22. Dim processMaximum As Integer = 0
    23. Public Property ProgressMaximum As Integer
    24. Get
    25. Return processMaximum
    26. End Get
    27. Set(value As Integer)
    28. If processMaximum <> value Then
    29. processMaximum = value
    30. NotifyPropertyChanged("ProgressMaximum")
    31. End If
    32. End Set
    33. End Property
    34. End Class
    35. End Namespace


    Funktioniert, aber nicht :/ :
    Fehler 1 Der Name "PropertyClass" ist im Namespace "clr-namespace:PropertyClassNamespace" nicht vorhanden.

    8-) faxe1008 8-)
    Das heißt dann, dass das der falsche Namespace ist, oder du die Anwendung noch nie kompiliert hast, seit du die Klasse erstellt hast.

    Aber mir scheint, du hast das Prinzip immer noch nicht verstanden, denn ProgressPercentage ergibt keinen Sinn. Bist du vertraut mit dem Singletone-Pattern?
    @Artentus:
    Ein ganz klares Nein :S . Ist das auf MSDN gut erklärt(Wenn du Zeit hast könntest du natürlich auch...)?

    Ja, ich habe es noch nie kompiliert. Wie denn auch wenn es mir andauernd den Fehler von oben wirft?

    8-) faxe1008 8-)
    Das ist nicht schwer und schnell erklärt.
    Ein Singletone ist eine Klasse, von der nur genau eine Instanz existiert.
    Ich löse das immer so:

    VB.NET-Quellcode

    1. Public Class SomeClass
    2. Private Shared _instance As SomeClass
    3. Public Shared Readonly Property Instance As SomeClass
    4. Get
    5. If _instance Is Nothing Then _instance = New SomeClass()
    6. Return _instance
    7. End Get
    8. End Property
    9. End Class
    Somit bekommst du über die statische Eigenschaft "Instance" das Singletone-Objekt.
    Und genau dieses Objekt ist es, das wir als DataContext für unser Window haben wollen.
    Das der Designer meint, eine Klasse gäbe es nicht, dass kann man meistens in der Pfeife rauchen. Sind noch Kinderkrankheiten. Einfach mal das Projekt builden oder gar mal debuggen oder VS neustarten, dann weiß er idR bescheid.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Sorry das ich heute so begriffsstuzig bin.

    Was passt hier nicht:

    VB.NET-Quellcode

    1. <Controls:MetroWindow x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
    5. Title=".NET FileCopier" Height="350" Width="648.674" xmlns:local="clr-namespace:SomeClassNamespace" DataContext="{x:Static local:SomeClass.Instance}">


    Visual Basic-Quellcode

    1. Imports System.ComponentModel
    2. Namespace SomeClassNameSpace
    3. Public Class SomeClass
    4. Implements INotifyPropertyChanged
    5. Public Event PropertyChanged As PropertyChangedEventHandler _
    6. Implements INotifyPropertyChanged.PropertyChanged
    7. Private Sub NotifyPropertyChanged(ByVal info As String)
    8. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
    9. End Sub
    10. Dim processValue As Integer = 0
    11. Public Property ProgressValue As Integer
    12. Get
    13. Return processValue
    14. End Get
    15. Set(value As Integer)
    16. If processValue <> value Then
    17. processValue = value
    18. NotifyPropertyChanged("ProgressValue")
    19. End If
    20. End Set
    21. End Property
    22. Dim processMaximum As Integer = 0
    23. Public Property ProgressMaximum As Integer
    24. Get
    25. Return processMaximum
    26. End Get
    27. Set(value As Integer)
    28. If processMaximum <> value Then
    29. processMaximum = value
    30. NotifyPropertyChanged("ProgressMaximum")
    31. End If
    32. End Set
    33. End Property
    34. Private Shared _instance As SomeClass
    35. Public Shared ReadOnly Property Instance As SomeClass
    36. Get
    37. If _instance Is Nothing Then _instance = New SomeClass()
    38. Return _instance
    39. End Get
    40. End Property
    41. End Class
    42. End Namespace


    8-) faxe1008 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „faxe1008“ ()

    Ah Ok so weit so gut:

    VB.NET-Quellcode

    1. xmlns:local="clr-namespace:NET_FileCopier" DataContext="{x:Static local:SomeClass.Instance}">


    Das letzte zu lösende Problem dabei:
    Der Name "SomeClass" ist im Namespace "clr-namespace:NET_FileCopier" nicht vorhanden.

    Ich bin mir hundertprozentig sicher, dass die Klasse die ich eingefügt habe SomeClass heißt und nicht in einem seperaten Namespace liegt :huh:

    8-) faxe1008 8-)
    Ja, der WPF-Designer zickt leider ab und zu ein bisschen rum, der Code kompiliert aber trotzdem fehlerfrei. Bei Fehlermelungen im XAML-Code sollte man daher immer erst genau überlegen, ob das wirklich ein Fehler ist, oder ob der Designer rumspinnt.
    Bei meiner Charmbar hab ich sowas: die Hälfte des XAML-Codes wird mir blau unterkringelt, aber es läuft trotzdem richtig.
    Ist dies ebenfalls so einer:
    Zeilennummer "23" und Zeilenposition "10" von "Durch das Festlegen von connectionId wurde eine Ausnahme ausgelöst.".


    Ich habe keine Eigenschaft Namens ConnectionId verwendet :huh:

    Der Fehler tritt hier auf:

    VB.NET-Quellcode

    1. Dim namen = New List(Of String)

    8-) faxe1008 8-)