2017-09-06 166 views
0

我有一個綁定到滑塊的文本框。滑塊不會更新到最大值

<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> 

後用戶選擇的東西,我重新計算最大(MaxMaxBackupSize),因爲它是綁定的屬性,這應該更新文本框和滑塊,但是,出於某種原因 - 只有文本框的值被改變,如果它高於最大值,則降至最大值。然而,滑塊似乎保持原樣,我仍然可以移動它,因爲我想(這也改變文本框中的文字...

我有以下相關屬性:

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; } 

的更改用戶按下後,正在取得一個槓桿是:

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

UPDATE0:(順便說一句,我使用的是被稱爲Fody.OnPropertyChanged一個NuGet包,節省了我需要提高onpropertychanged - 所以這是不是這個原因)

更新:我應該清楚我在說什麼時,我的意思是滑塊不會改變 - 滑塊不會改變,但滑塊的最大值保持舊的最大值。假設在最大值是50之前,現在是20,如果滑塊之前是30,那麼它將移動到20,但是我仍然可以將它移動到50。我希望最大值被限制在20不確定是否可能。

UPDATE2:現在我找到了一個解決方法,來檢查值大於該屬性的最大做大,如果是的話它會彈出一個消息框,說這是不可能的,並返回。

+0

請提供一個最小的回購,當你問一個問題上的SO:https://stackoverflow.com/help/mcve – mm8

+0

缺少什麼?也許只是在用戶選擇一些東西之後所做的更改......我會添加它。 –

+0

@Sameed閱讀文章 - 我使用了一個特殊的包,它爲我實現它,它的工作原理非常完美。這不是問題。 –

回答

1

這個問題似乎是靜態的屬性,因爲NotifyPropertyChanged只能在一個實例調用,所以要使其工作,你就必須實現它作爲一個靜態的成員,具有非靜態訪問像

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

現在你可以有一個非靜態訪問靜態變量,它可以提高NotifyPropertyChanged事件