Laden...

Ändern mehrere Properties gleichzeitig

Erstellt von Kriz vor 11 Monaten Letzter Beitrag vor 11 Monaten 397 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 11 Monaten
Ändern mehrere Properties gleichzeitig

Servus,

Ich habe drei Properties:

       private bool _ShowEllipse;
       public bool ShowEllipse
       {
           get { return _ShowEllipse; }
           set { SetProperty(ref _ShowEllipse, value); }
       }
       private bool _ShowRectangle;
       public bool ShowRectangle
       {
           get { return _ShowRectangle; }
           set { SetProperty(ref _ShowRectangle, value); }
       }
       private bool _ShowPath;
       public bool ShowPath
       {
           get { return _ShowPath; }
           set { SetProperty(ref _ShowPath ,value); }
       }

Es darf immer nur eine dieser Properties true sein. Nun habe ich zwei Möglichkeiten:

  1. Im Setter jeder Propertie die Werte der anderen beiden Properties auf false setzen
  2. Oder per switch jede Property einzeln setzen:
            switch (overlay.Type)
           {
               case OverlayType.Ellipse:
                   ShowEllipse = true;
                   ShowRectangle = false;
                   ShowPath = false;
                   break;
               case OverlayType.Rectangle:
                   ShowEllipse = false;
                   ShowRectangle = true;
                   ShowPath = false;
                   break;
               case OverlayType.Path:
                   ShowEllipse = false;
                   ShowRectangle = false;
                   ShowPath = true;
                   break;
               default:
                   break;
           }

-> Würde das hier gern schöner formatieren, aber es wird leider nicht richtig übernommen...

Beide Ansätze wirken nicht wirklich elegant, gibt es noch andere Möglichkeiten das Problem zu lösen?

Danke schonmal!

Kriz

4.942 Beiträge seit 2008
vor 11 Monaten

Warum überhaupt 3 Eigenschaften, wenn du doch schon den OverlayType hast?

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 11 Monaten

Zitat von Th69

Warum überhaupt 3 Eigenschaften, wenn du doch schon den OverlayType hast?

Ich habe in einem MAUI Projekt drei verschiedene Controls von denen nur eins angezeigt werden darf. Das steuer ich über die IsVisible-Property. So brauche ich dann für jedes Conntrol eine eine IsVisible-Property zum Binden.

126 Beiträge seit 2023
vor 11 Monaten

WÄre es nicht einfacher so?

public bool ShowEllipse => overlay.Type == OverlayType.Ellipse;
public bool ShowRectangle => overlay.Type == OverlayType.Rectangle;
public bool ShowPath => overlay.Type == OverlayType.Path;

und immer wenn sich in overlay die Eigensschaft Type ändert, dann folgenden Code noch ausführen

OnPropertyChanged(nameof(ShowEllipse));
OnPropertyChanged(nameof(ShowERectangle));
OnPropertyChanged(nameof(ShowPath));

Alternativ gäbe es auch noch diesen EnumToBoolConverter aus dem CommunityToolkit

Hat die Blume einen Knick, war der Schmetterling zu dick.

126 Beiträge seit 2023
vor 11 Monaten

Zitat von Kriz

-> Würde das hier gern schöner formatieren, aber es wird leider nicht richtig übernommen...

Du hast für deinen Code(-Block) die Code Formatierung verwendet und nicht den direkt daneben liegenden Button für Code-Block einfügen.

Mit Code-Block einfügen sieht das dann so aus:

switch (overlay.Type)
{
    case OverlayType.Ellipse:
        ShowEllipse = true;
        ShowRectangle = false;
        ShowPath = false;
        break;
    case OverlayType.Rectangle:
        ShowEllipse = false;
        ShowRectangle = true;
        ShowPath = false;
        break;
    case OverlayType.Path:
        ShowEllipse = false;
        ShowRectangle = false;
        ShowPath = true;
        break;
    default:
        break;
}

Die Code Formatierung verwendest du, wenn du im Text etwas als Code formatieren möchtest, wie z.B. den Typen string oder deinen overlay.Type.

Hinweis von Abt vor 11 Monaten

Hab es angepasst.

Hat die Blume einen Knick, war der Schmetterling zu dick.