你可能会说它是如何在拖动时停止更新滑块值的重复?但老实说,解决方案从2011年开始,并没有为我工作(甚至评论了其他用户接受的答案),其他答案与我无关.所以请耐心等待.
这是我的问题:我有一个绑定到这样的值的滑块:
这就是价值:
private double _audioValue; public double AudioValue { get { return _audioValue; } set { if (_audioValue == value) return; _audioValue = value; SendPacket(cockpitType, (byte)Index.AudioSlider, (byte)_audioValue); OnPropertyChanged("AudioValue"); } }
正如您所看到的,每次值发生变化时我都会发送一个数据包,当它更新拖动值时,它只是在服务器上发送垃圾邮件,这是必须要防止的.
我试图将滑块绑定到一个函数(mouseUp),但我无法通过这种方式获取值.
任何想法我能做什么?
非常感谢.
编辑:
这里的答案WPF:在用户拖动后触发事件的滑块对我没有帮助,因为它是数据模板中生成的滑块,事件与我无关.
如果您使用的是WPF 4.5,则可以使用
Value="{Binding AudioValue, Delay=500}"
这将限制更改通知.如果用户快速拖动滑块,这将"重置"内部计时器并将丢弃挂起的通知.当用户停止并且500毫秒延迟结束时,它将调用您的setter方法一次.
有很多方法可以做到这一点,所以这只是一个建议.您可以在VM中使用Rx及其Throttle方法执行此操作.这基本上Binding
和Delay
房产一样.
我有一个问题,就是只覆盖OnThumbDragCompleted
其他答案中建议的方法.这意味着只有在Slider
通过拖动拇指进行操作时才会传播更改.例如,如果单击拇指旁边的,则不会通知您的属性.基本上,我的意思是,你必须确保它的值同步,Value
并且FinalValue
如果你与你来自哪里,得到的解决方案去Slider
.