AvaloniaUI Verständnisfrage

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    AvaloniaUI Verständnisfrage

    Hallo,

    bin mir nicht sicher ob das hier im richtigen Bereich ist aber ich versuch es mal. Ich bin aktuell dabei mich etwas in AvaloniaUI einzuarbeiten was ja ähnlich arbeitet wie WPF.
    Ich kenn mich mit dem Datenbindungs Gedöns nur leider noch nicht so gut aus.

    Grundsätzlich an was ich derzeitig arbeite ist ein "DeviceContainer" -Control, welches "DevicePanel"s - Controls beinhaltet. Im Prinzip is ein DevicePanel ein UserControl, welches ein "Device" darstellt, mit der die Software dann arbeiten kann. Jedes DevicePanel hat also ein Device-Objekt. Mein Plan ist nachher, das man von DevicePanel erben kann und dann für jedes Gerät spezifisches Rendering hat um andere Daten darzustellen die das Gerät bereitstellt.

    Egal. Ich habe im DevicePanel eine StyledProperty (DependencyProperty in WPF) angelegt, welches DeviceProperty heißt:

    DevicePanel : UserControl

    C#-Quellcode

    1. public static readonly StyledProperty<Device> DeviceProperty = AvaloniaProperty.Register<DevicePanel, Device>(nameof(Device));
    2. public Device Device
    3. {
    4. get { return GetValue(DeviceProperty); }
    5. set { SetValue(DeviceProperty, value); }
    6. }


    Das Device hat eine Bool-Property "IsConnected" die sich verändern kann. Ich möchte jetzt, dass sich die Hintergrundfarbe des DevicePanels je nach Wert in IsConnected verändert um den Device-Status zu visualisieren.
    Was wäre jetzt der richtige Weg dies zu tun? Meine Device Klasse erbt von ReactiveObject und die IsConnected Eigenschaft ist wie folgt:

    Device : ReactiveObject

    C#-Quellcode

    1. private bool isConnected;
    2. public bool IsConnected
    3. {
    4. get => isConnected;
    5. set => this.RaiseAndSetIfChanged(ref isConnected, value);
    6. }


    Jetzt möchte ich, dass z.B. der Background vom UserControl bei IsConnected = true auf grün und bei IsConnected = false auf Rot gesetzt wird.

    Das UserControl hat ja eine Background Property, die nimmt einen Brush, wenn ich das jetzt auf eine Variable binde die einen Brush Typ hat, wie kann ich den Brush dann setzen lassen wenn die IsConnected Eigenschaft sich ändert?


    Wie stelle ich das am besten an?

    Danke im Voraus

    Gruß seh
    Hallo

    seh schrieb:

    Was wäre jetzt der richtige Weg dies zu tun?

    Du bindest im XAML die Background-eigenschaft auf die IsConnected-Eigenschaft und packst einen Converter ins Binding welcher dir in Abhängigkeit des Wertes (True oder False) einen SolidColorBrush zurückgibt.

    Siehe mein Kapitel Converter in der Tutorialreihe.

    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. ##

    *Grübel*
    Hört sich für mich grade hart wie nach Plug in Play an!? Da würde ich ein Plugin System für benutzen/bauen...?!

    oder weißt du nicht wie du daten in ein Control/Layout Bindest?!
    "wenn dies so ist, dann müsstest du mir mal sagen in welches Control/Layout du etwas gebunden haben möchtest..."

    Ps. ich glaube das mit Avalon keine anderen Controls/Layout hinzukommen... naja evtl RecyclingView & CardsView.....

    mh... 8o