滑块不会更新为最大值

时间:2017-09-06 10:35:59

标签: c# wpf binding slider

我有一个绑定到滑块的文本框。

Settings/Preferences - Build, Execution, Deployment - CMake

在用户选择某些内容后,我重新计算Maximum(MaxMaxBackupSize),因为它的属性绑定了,这应该更新文本框和滑块,但是,由于某种原因 - 只有文本框值被更改,如果它高于最大值,降低到最大值。然而滑块似乎保持不变,我仍然可以按照我的意愿移动它(这也改变了文本框中的文字......

我有以下相关属性:

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

用户按下操纵杆后所做的更改是:

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

UPDATE0 :(顺便说一下,我正在使用一个名为Fody.OnPropertyChanged的nuget包来节省我需要提高onpropertychanged - 所以这不是原因)

更新:当我的意思是滑块没有改变时,我应该清楚我说的是什么 - 滑块确实移动了,但滑块的最大值仍然是旧的最大值。假设在最大值为50之前,现在是20,如果滑块先前在30,那么它将转移到20,但我仍然有能力将它移动到50.我希望最大限制为20不确定它是否可行。

UPDATE2:现在我找到了一个解决方法,检查该值是否大于属性中的最大值,如果是,则会弹出一个消息框,说明它不可能,并返回。

1 个答案:

答案 0 :(得分:1)

问题似乎是静态属性,因为NotifyPropertyChanged只能在实例上调用,所以为了使它工作,你必须将它作为静态成员实现,具有非静态访问器,如

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

现在你可以拥有一个带有非静态访问器的静态变量,它可以引发NotifyPropertyChanged事件