Laden...

WPF/MVVM: Style soll für alle Views gelten

Erstellt von hypersurf vor 13 Jahren Letzter Beitrag vor 13 Jahren 960 Views
H
hypersurf Themenstarter:in
523 Beiträge seit 2008
vor 13 Jahren
WPF/MVVM: Style soll für alle Views gelten

Hi Leute,

ich habe eine Frage zum MVVM-Pattern.

Jede Textbox die den Focus erhält, bekommt eine andere Hintergrundfarbe (gelb). Wechselt der Focus bekommt die Textbox wieder eine andere Hintergrundfarbe (weiss).

Dazu habe ich einen Style im View definiert und die Value-Eigenschaft an eine Property in meinem ViewModel gebunden:


    <Window.Resources>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Background" Value="{Binding Path=BackgroundColorTextBoxGotFocus}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>


        public Brush BackgroundColorTextBoxGotFocus
        {
            get { return _GlobalConfig.TextboxBackColorWithFocus; }
            set
            {
                _GlobalConfig.TextboxBackColorWithFocus = value;
                ValueChanged("BackgroundColorTextBoxGotFocus");
            }
        }

Das funktioniert soweit auch ohne Probleme. Jetzt zu meiner Frage: Der Style soll für alle Views gelten und die Farben sollen aus einer Datenbank gelesen werden. Dafür habe ich bereits eine Klasse geschrieben, die entsprechende Properties bereitstellt. Wie umgehe ich es, dass ich in jedem ViewModel die Property für das DataBinding der Farben neu definieren muss?

Und noch eine Frage: Wo definiere ich den Style, dessen Setter.Values aus der Datenbank gelesen werden sollen? Das Loginfenster der Datenbank ist natürlich auch nach MVVM entwickelt, und die Datenbankverbindung steht somit erst nach erfolgreichem Anmelden mittels Loginfenster zur Verfügung.

F
240 Beiträge seit 2006
vor 13 Jahren

Ich würde nur den identifier in der db speichern, und die styles als resourcen. Somit hast du default styles und lädst dann dynamisch je nachdem welcher identifier aus der db kommt.

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo hypersurf,

zu deiner ersten Frage: Anstatt den Style in den Ressourcen des Fensters zu packen, pack den Style in die App.xaml bzw. dort in die Ressourcen.

zu einer zweiten Frage: Du liest den Wert aus der Datenbank aus und ersetzt diesen im Setter. Ein Binding reicht dazu schon.

zero_x