0

我将Slider的值绑定到表示联网设备上的音量的整数属性。这个网络请求需要一点时间(通常小于 100 毫秒),并且不知何故会导致 Slider 感觉不稳定。

这是我过于简化的代码来澄清:

    Private _playbackVolume As Integer
    Private _deviceForDemonstrationPurposes As New Device

    Public Property PlaybackVolume As Integer
        Get
            Return _playbackVolume
        End Get
        Set(value As Integer)
            _deviceForDemonstrationPurposes.Volume = value
        End Set
    End Property

    Friend Sub UpdateVolume(volume As Integer)
        ' this is called by the instance of Device whenever its volume changes.
        _playbackVolume = volume
        RaisePropertyChanged("PlaybackVolume") ' INotifyPropertyChanged implementation.
    End Sub

绑定到PlaybackVolume属性将导致 setter 在仍然拖动拇指时触发。由于网络延迟问题,无论请求完成多少毫秒,滑块都会被锁定。

什么被认为是使滑块再次变得光滑的最佳方法?

4

1 回答 1

1

考虑将 UI(滑块)与实际获取和设置音量的组件分离。当滑块值更改时,它应该排队请求将音量更改为新值,但继续其愉快的方式。仅在您第一次从设备绘制或刷新 UI 时从设备的音量设置滑块位置;您可能可以暗示音量设置为用户将其拖动到的位置。

编辑

(完全披露:我自己没有做过很多 WPF)

因此,在查看了我的意思的实际示例后,我了解了 UpdateSourceTrigger,它为您提供了多种触发绑定元素以重新绑定的方法。我找到了这个例子,它结合UpdateSourceTrigger了一个计时器。这个想法是拖动滑块开始一个短暂的超时,之后UpdateSourceTrigger被告知更新其数据绑定。诀窍是当用户继续更改滑块值时,超时会中断。因此,最终效果是,在用户最终确定他们想要的值之前,您的设备实际上不会使用滑块值进行更新,这应该会在您正在寻找的滑动时为您提供流畅、响应式的 UI。您仍然可以像现在一样保持设备上滑块的实时更新。我希望这能让事情变得更清楚一些。

于 2012-05-07T03:52:57.797 回答