Autor Beitrag
funcry
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: Mi 07.04.10 15:40 
Ich habe eine funktionierende Lösung, suche aber nach einem bsseren/eleganteren Weg, wie sich folgende Problematik lösen lässt:

In meiner WPF Anwendung gibt es Buttons und andere UI Elemente. Diese sind IsEnabled = true oder false, je nachdem in welchem Zustand sich die Anwendung befindet. In meinem Fall gibt es 5 Zustände in denen sich die Anwendung befinden kann.

Beispiel:
Wenn sich die Anwendung im Zustand 2 oder 4 befindet, soll Button1.IsEnabled = true sein, andernfalls false.

Um es im ersten Schritt im Code-Behind zu bündeln, habe ich einen enum definiert, welcher die 5 Zustände enthält. So brauche im im Code Behind an entsprechender Stelle nur noch den Enum setzen. Dieser ist wiederum als public Property mit Setter definiert, wobei im Setter gleich die UI Vorgänge stattfinden:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
public partial class Muh: Page, INotifyPropertyChanged
    {
        public enum MuhStatus { foo, bar, ... }
        
        private MuhStatus currentStatus;
        public MuhStatus CurrentStatus
        {
            get
            {
                return this.currentStatus;
            }
            set
            {
                this.currentStatus = value;
                OnPropertyChanged("CurrentStatus");

                if (value == MuhStatus.foo) 
                {
                    this.borderStatus.Visibility = Visibility.Visible;
                    this.textBlockStatusItem.Text = "Waiting ...";
                }

                if (value == MuhStatus.bar) 
                {
                    this.buttonRandom.IsEnabled = false;
                    this.buttonAbort.IsEnabled = false;                    
                    this.message.Show("Results loaded.");
                    this.borderStatus.Visibility = Visibility.Hidden;
                }

                if (value == ...) 
                {
                    ...
                }
                
            }
        }


Jetzt könnte ich Converter erstellen, und die jeweiligen UI Elemente die IsEnabled Eigenschaft an den passenden Converter binden, der - passend für das jeweilige UI Element - true oder false liefert, anhängig von CurrentStatus. Würde funktionieren, habe ich auch schon ausprobiert, nur finde das ziemlich umständlich.

Hier meine Frage:
Gibt es eine elegantere Möglichkeit/Vorgehensweise dies zu realisieren ?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 07.04.10 16:18 
Hast du dich schonmal mit ICommand beschäftigt? Ich denke, das dürfte hier passen :) .

_________________
>λ=