Hallo Leute,
ich stehe mal wieder vollkommen auf dem Schlauch. Ich bin mittlerweile soweit, das MVVM Pattern zu verwenden und auch die Bindings habe ich (dachte ich) bereits verstanden. Aber nun stehe ich arg auf dem Schlauch und weiß nicht wo mein Denkfehler liegt:
Ich habe eine Klasse AppSettings, in der ich App-übergreifende Variablen speichern möchte und diese dann auch auf Festplatte schreiben möchte. Innerhalb dieser habe ich mehrere Variablen definiert auf die ich zugreife (INotifyChanged ist dort implementiert). Und das Binding an diese Variablen funktioniert auch ohne Probleme, wie das Beispiel zeigt:
Wie man sieht greife ich zB mit dem Slider auf TabSize zu und lasse mir diese Variable auch in der TextBox daneben anzeigen. Die Werte verändern sich auch, wenn ich am Slider schiebe.
Soweit so gut.
Wenn ich nun aber versuche, den Wert anderweitig zu nutzen, zB die TabSize als Binding-Referenz zu verwenden, aktualisiert sich da nichts:
Bsp:
Hier wird nun weder der Converter aufgerufen, noch ein anderer Wert gesetzt. Wenn ich zur Designzeit nun den Wert in der AppSettings setze, wird das Verhalten auch korrekt implementiert, nur das Schieben des Schiebereglers (oder das Auswählen der ComboBox) zeigen kein dynamisches Verhalten. Und ich frage mich wieso? Ich meine, da die Textbox den richtigen Wert bekommt, muss INotifyPropertyChanged auch richtig ausgelöst werden. Doch der Wert kommt bei anderen Elementen nicht an. Und nun sehe ich den Wald vor lauter Bäumen nicht mehr.
Vielleicht hat ja jemand Rat
ich stehe mal wieder vollkommen auf dem Schlauch. Ich bin mittlerweile soweit, das MVVM Pattern zu verwenden und auch die Bindings habe ich (dachte ich) bereits verstanden. Aber nun stehe ich arg auf dem Schlauch und weiß nicht wo mein Denkfehler liegt:
Ich habe eine Klasse AppSettings, in der ich App-übergreifende Variablen speichern möchte und diese dann auch auf Festplatte schreiben möchte. Innerhalb dieser habe ich mehrere Variablen definiert auf die ich zugreife (INotifyChanged ist dort implementiert). Und das Binding an diese Variablen funktioniert auch ohne Probleme, wie das Beispiel zeigt:
XML-Quellcode
- <ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding Source={x:Static ISource:FontSize.Values}, Path=ArraySource}" SelectedItem="{Binding Source={x:Static model:AppSettings.Settings}, Path=FontSize}"/>
- <TextBlock Text="Schriftart:" Grid.Row="2"/>
- <ComboBox Grid.Row="2" Grid.Column="2" ItemsSource="{Binding Source={x:Static ISource:FontFamily.Fonts}, Path=Values}" SelectedItem="{Binding Source={x:Static model:AppSettings.Settings}, Path=FontFamily}" />
- <TextBlock Text="Größe der Schaltflächen:" Grid.Row="3"/>
- <Slider Minimum="1" Maximum="7" TickFrequency="1" IsSnapToTickEnabled="True" Grid.Row="3" Grid.Column="2" TickPlacement="BottomRight" Value="{Binding Source={x:Static model:AppSettings.Settings}, Path=ButtonSize}"/>
- <TextBlock Text="{Binding Source={x:Static model:AppSettings.Settings}, Path=ButtonSize}" Grid.Row="3" Grid.Column="3" Margin="10,0,0,0"/>
- <TextBlock Text="Größe der Tabs:" Grid.Row="4"/>
- <Slider Minimum="1" Maximum="5" TickFrequency="1" IsSnapToTickEnabled="True" Grid.Row="4" Grid.Column="2" TickPlacement="BottomRight" Value="{Binding Source={x:Static model:AppSettings.Settings}, Path=TabSize}"/>
- <TextBlock Text="{Binding Source={x:Static model:AppSettings.Settings}, Path=TabSize}" Grid.Row="4" Grid.Column="3" Margin="10,0,0,0"/>
-
Wie man sieht greife ich zB mit dem Slider auf TabSize zu und lasse mir diese Variable auch in der TextBox daneben anzeigen. Die Werte verändern sich auch, wenn ich am Slider schiebe.
Soweit so gut.
Wenn ich nun aber versuche, den Wert anderweitig zu nutzen, zB die TabSize als Binding-Referenz zu verwenden, aktualisiert sich da nichts:
Bsp:
Hier wird nun weder der Converter aufgerufen, noch ein anderer Wert gesetzt. Wenn ich zur Designzeit nun den Wert in der AppSettings setze, wird das Verhalten auch korrekt implementiert, nur das Schieben des Schiebereglers (oder das Auswählen der ComboBox) zeigen kein dynamisches Verhalten. Und ich frage mich wieso? Ich meine, da die Textbox den richtigen Wert bekommt, muss INotifyPropertyChanged auch richtig ausgelöst werden. Doch der Wert kommt bei anderen Elementen nicht an. Und nun sehe ich den Wald vor lauter Bäumen nicht mehr.
Vielleicht hat ja jemand Rat