Mehrere DependencyProperty's

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Mehrere DependencyProperty's

    Hallo Leute ,

    ich versuch mich gerade mit den abhängigen Eigenschaften.
    Meine Fragen:
    1. Wie erstell ich mehrere Eigenschaften in einer Klasse
    2. Wie berechne ich Werte

    Ich hab da schon was gemacht aber ich bin mir nicht sicher!
    Das ist mein bisheriger Code:


    VB_CODE
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Imports System.Windows
    2. Public Class Kreis
    3. Inherits DependencyObject
    4. '
    5. 'Property Durchmesser
    6. '
    7. Public Shared ReadOnly DurchmesserProperty As DependencyProperty =
    8. DependencyProperty.Register("Durchmesser", GetType(Double), GetType(Kreis),
    9. New FrameworkPropertyMetadata(11.2, AddressOf OnDurchmesserChanged))
    10. Public Property Durchmesser() As Double
    11. Get
    12. Return DirectCast(GetValue(DurchmesserProperty), Double)
    13. End Get
    14. Set(value As Double)
    15. SetValue(DurchmesserProperty, value)
    16. End Set
    17. End Property
    18. '
    19. Private Shared Sub OnDurchmesserChanged(obj As DependencyObject, args As DependencyPropertyChangedEventArgs)
    20. ' Throw New NotImplementedException()
    21. End Sub
    22. '
    23. 'Property Umfgang
    24. '
    25. Public Shared ReadOnly UmfangProperty As DependencyProperty =
    26. DependencyProperty.Register("Umfang", GetType(Double), GetType(Kreis),
    27. New FrameworkPropertyMetadata(11.2, AddressOf OnUmfangChanged))
    28. Public Property Umfang() As Double
    29. Get
    30. Return DirectCast(GetValue(UmfangProperty), Double)
    31. End Get
    32. Set(value As Double)
    33. Dim wert = value * 3.14
    34. SetValue(UmfangProperty, (wert))
    35. End Set
    36. End Property
    37. '
    38. Private Shared Function OnUmfangChanged(d As DependencyObject, baseValue As Object) As Object
    39. ' Throw New NotImplementedException()
    40. End Function
    41. End Class



    XAML
    Spoiler anzeigen

    XML-Quellcode

    1. <Window 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:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:DependencyProperty"
    7. mc:Ignorable="d"
    8. Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    9. <Grid>
    10. <StackPanel Name="StackPanel1">
    11. <Label Margin="5,5,5,50" FontSize="16">Abhängige Eigenschaften (Dependency Properties) und Angehängte Eigenschaften (Attached Properties)</Label>
    12. <Button Name="Button1" Click="Button1_Click" Margin="10,10,10,50">Button</Button>
    13. <Slider Height="50" Name="Slider1" Minimum="1" Maximum="110" Value="{Binding Path=Durchmesser}"/>
    14. <Label Content="{Binding Path=Durchmesser}" />
    15. <Slider Height="50" Name="Slider2" Minimum="1" Maximum="110" Value="{Binding Path=Umfang}" />
    16. <Label Content="{Binding Path=Umfang}" Background="AliceBlue" Width="100" Height="50"/>
    17. <Label Content="{Binding ElementName=Slider2, Path=Value}" Background="Yellow" Width="100" Height="50"/>
    18. </StackPanel>
    19. </Grid>
    20. </Window>


    Amro schrieb:

    Wie erstell ich mehrere Eigenschaften in einer Klasse

    Hast ja eh? Du hast zwei Eigenschaften erstellt.

    Amro schrieb:

    Wie berechne ich Werte

    Kommt darauf an welche und wo diese benötigt werden.

    PS: Um einfach von wo anders darauf zu Binden benötigt es eigentlich gar keine DependencyProperties.
    Was anderes ist es wenn ein Property im XAML als Binding-Ziel verfügbar sein soll.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hast ja eh? Du hast zwei Eigenschaften erstellt.

    Wird es tatsächlich so gemacht!?
    Kommt darauf an welche und wo diese benötigt werden.

    Hatte jetzt versucht den Umfang im Setter der Umfang-Eigenschaft zu berechnen.
    Das Funktioniert leider nicht.
    Um einfach von wo anders darauf zu Binden benötigt es eigentlich gar keine DependencyProperties.

    Ich weiß nur das man es noch mit InotifyProperty machen kann.
    Ich will nur verstehen was DependencyObjekt ist und
    wo ich es gebrauchen kann.

    Amro schrieb:

    Wird es tatsächlich so gemacht!?

    Jep, genau so

    Amro schrieb:

    Hatte jetzt versucht den Umfang im Setter der Umfang-Eigenschaft zu berechnen.

    Ne, nicht im Setter. Wenn dann im Getter. Und der Umfang sollte dann ja eigendlich ReadOnly sein oder? Weil der soll ja nicht gesetzt werden können wenn es ein berechneter Wert ist.

    Amro schrieb:

    ch will nur verstehen was DependencyObjekt ist und
    wo ich es gebrauchen kann.

    Lobenswert und gut so. Ich bin der Meinung das man Sie nicht oft benötigt. So gut wie immer reicht ein normales Property. Einzig wenn man AttachedProperties erstellen möchte und wenn man eigene CustomControls oder UserControls mit Eigenschaften versehen möchte welche Bindbar sein sollen.

    Ich lade heute noch das nächste Kapitel meiner Tutorialreihe hoch und als nächstes kommen dann auch schon Dependency Properties. Also vieleicht kannst du ja noch ein wenig warten.
    Ansonsten kann ich dir gerne Helfen. Dafür wäre es aber gut was genau die DP machen sollen und wofür sie da sein sollen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##


    Dafür wäre es aber gut was genau die DP machen sollen und wofür sie da sein sollen.


    Im Moment hab ich nur ein Slider und ein Label die an diese Eigenschaft gebunden sind

    XML-Quellcode

    1. <Slider Height="50" Name="Slider2" Minimum="1" Maximum="100" Value="{Binding Path=Umfang}" />
    2. <Label Content="{Binding Path=Umfang}" Background="AliceBlue" Width="100" Height="50"/>


    Wenn ich den Slider bewege soll er im Label den Umfang anzeigen. (Umfang=Slider.Value*3,14)
    Slider.Value ist gebunden am Umfang.
    Problem ist , ich bekomme nur den Slider.Value im Label angezeigt.
    Was mach ich da falsch?
    Hallo

    Das gestalltet sich bei Dependency Properties etwas anders da das DependencyProperty Sahred ReadOnly ist. Somit musst du über SetValue am DependencyObject (also Kreis) den Wert setzen.

    Hier ein Beispiel für dein Vorhaben in beide Richtungen: (bei deinem letzten XAML ist das Binding übrigens falsch)

    VB.NET-Quellcode

    1. Public Class Kreis
    2. Inherits DependencyObject
    3. Public Sub New()
    4. End Sub
    5. 'Property Durchmesser
    6. '
    7. Public Shared ReadOnly DurchmesserProperty As DependencyProperty =
    8. DependencyProperty.Register("Durchmesser", GetType(Double), GetType(Kreis),
    9. New FrameworkPropertyMetadata(11.2, AddressOf OnDurchmesserChanged))
    10. Public Property Durchmesser() As Double
    11. Get
    12. Return DirectCast(GetValue(DurchmesserProperty), Double)
    13. End Get
    14. Set(value As Double)
    15. SetValue(DurchmesserProperty, value)
    16. End Set
    17. End Property
    18. '
    19. Private Shared Sub OnDurchmesserChanged(obj As DependencyObject, args As DependencyPropertyChangedEventArgs)
    20. DirectCast(obj, Kreis).SetValue(UmfangProperty, args.NewValue * 3.14)
    21. End Sub
    22. '
    23. 'Property Umfgang
    24. '
    25. Public Shared ReadOnly UmfangProperty As DependencyProperty =
    26. DependencyProperty.Register("Umfang", GetType(Double), GetType(Kreis),
    27. New FrameworkPropertyMetadata(11.2, AddressOf OnUmfangChanged))
    28. Public Property Umfang() As Double
    29. Get
    30. Return DirectCast(GetValue(UmfangProperty), Double)
    31. End Get
    32. Set(value As Double)
    33. SetValue(UmfangProperty, value)
    34. End Set
    35. End Property
    36. '
    37. Private Shared Sub OnUmfangChanged(obj As DependencyObject, args As DependencyPropertyChangedEventArgs)
    38. DirectCast(obj, Kreis).SetValue(DurchmesserProperty, args.NewValue / 3.14)
    39. End Sub
    40. End Class


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ne, ging nur darum das der Slider und das Label beides an "Umfang" gebunden ist, weis nicht ob das so gewollt ist.

    Freut mich das es nun funzt

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##