2017-09-06 121 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事件