2017-09-06 3 views
0

Ich habe eine Textbox, die an einen Schieberegler gebunden ist.Schieberegler wird nicht auf den maximalen Wert aktualisiert

<TextBox Text="{Binding ElementName=maxValue, Path=Value, UpdateSourceTrigger=LostFocus}" TextAlignment="Center" VerticalContentAlignment="Center" Width="30" Height="25" BorderBrush="Transparent" PreviewKeyDown="TextBox_PreviewKeyDown"></TextBox> 
<Slider Value="{Binding TotalSize}" Maximum="{Binding MaxMaxBackupSize, Mode=TwoWay}" Minimum="{Binding MinBackupSize}" TickPlacement="BottomRight" TickFrequency="2" IsSnapToTickEnabled="True" Name="maxValue"></Slider> 

Nachdem ein Benutzer etwas wählt, neu zu berechnen ich das Maximum (MaxMaxBackupSize), da es eine Eigenschaft binded ist, das das Textfeld aktualisieren soll und den Schieberegler, aber aus irgendeinem Grunde - nur der Textbox Wert wird geändert, und Wenn es höher als das Maximum war, wird es auf das Maximum abgesenkt. Der Schieber scheint jedoch sein unberührt gelassen, und ich kann es immer noch bewegen, wie ich will (und dies ändert sich auch der Text in der Textbox ...

Ich habe folgende relevante Eigenschaften:

private int totalSize; 

public int TotalSize 
{ 
    get { return totalSize; } 
    set 
    { 
     if (value == totalSize) 
      return; 

     totalSize = value; 
     ConfigChanged = true; 
     ChangeIni = true; 
    } 
} 

public static int MaxMaxBackupSize { get; set; } 
public static int MinBackupSize { get; set; } 

Die ändern, dass nach der Benutzerpresse wird ein Hebel ist:

... 
MaxMaxBackupSize = Convert.ToInt16(f/1000000000) 
TotalSize = (TotalSize < MaxMaxBackupSize) ? TotalSize : MaxMaxBackupSize; 
... 

UPDATE0: (BTW, ich bin ein nuget Paket mit Fody.OnPropertyChanged genannt, die die Notwendigkeit erspart mir zu erhöhen OnPropertyChanged - so ist dies nicht der Grund)

UPDATE: Ich sollte klar sein, was ich sage, wenn ich meine, der Schieberegler ändert sich nicht - der Schieberegler verschiebt sich, aber der Maximalwert des Schiebereglers bleibt der alte Maximalwert. Sagen Sie, wenn der Maximalwert vor 50 lag, und jetzt seine 20, wenn der Schieberegler zuvor auf 30 stand, wird er auf 20 verschoben, aber ich kann ihn immer noch bis 50 bewegen. Ich möchte, dass das Maximum bei 20 begrenzt wird Nicht sicher, ob es überhaupt möglich ist oder nicht.

UPDATE2: jetzt fand ich eine Abhilfe, um zu überprüfen, ob der Wert größer als der max in der Eigenschaft ist, und wenn ja, erscheint es ein Meldungsfeld auf und sagte es nicht möglich ist, und kehrt zurück.

+0

Bitte geben Sie einen minimalen Repo, wenn Sie eine Frage stellen, auf SO: https://stackoverflow.com/help/mcve – mm8

+0

Was fehlt? Vielleicht nur die Änderung, die ich mache, nachdem der Benutzer etwas gewählt hat ... Ich werde es hinzufügen. –

+0

@Sameed Lesen Sie den Beitrag - Ich verwende ein spezielles Paket, das sie für mich implementiert, und es funktioniert perfekt. Das ist nicht das Problem. –

Antwort

1

Das Problem scheint die statischen Eigenschaften zu sein, da die NotifyPropertyChanged kann nur auf einer Instanz aufgerufen werden, so es Sie es als statisches Mitglied müßte implementieren funktioniert, mit einer nicht-statischen Accessor wie

private static int _maxBackupSize; 
public int MaxBackupSize 
{ 
    get { return _maxBackupSize; } 
    set { _maxBackupSize = value; <However your Framework raises the Event> } 
} 

Jetzt können Sie eine statische Variable mit einer nicht-statischen Accessor haben, die das NotifyPropertyChanged Ereignis auslösen können

Verwandte Themen