我的需求:我需要一个滑块事件,它只有在用户结束触摸控件时才会触发
public class ExtendedSlider : Slider { public event EventHandler StopedDraging; public void OnStopedDrag() { if (StopedDraging != null) { StopedDraging(this,EventArgs.Empty); } } }
<ListView.ItemTemplate >
<Label Text="{Binding luminaireLevel, StringFormat='{0:F0}%'}" />
<PCAControls:ExtendedSlider Maximum="100" Minimum="25"
Value="{Binding luminaireLevel, Mode=TwoWay}"
LuminaireID="{Binding id}"
StopedDraging="ExtendedSlider_StopedDraging"
/>
</ListView.ItemTemplate>
class ExtendedSliderRenderer : SliderRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Slider> e) { base.OnElementChanged(e); if (Control != null) { var slider = (PCA.CustomControls.ExtendedSlider)e.NewElement; Control.Max = (int)(slider.Maximum - slider.Minimum); Control.Progress = (int)(slider.Value - slider.Minimum); Control.StopTrackingTouch += Control_StopTrackingTouch; } } void Control_StopTrackingTouch(object sender, SeekBar.StopTrackingTouchEventArgs e) { var slider = (PCA.CustomControls.ExtendedSlider)Element; slider.Value = Control.Progress + slider.Minimum; slider.OnStopedDrag(); } }
问题是:我实现了我的预期,但是用户停止拖动滑块或在滑块之间点击,luminaireLevel(vewmodel属性)正在更新,但滑块始终显示完整的进程
当您的渲染器更改iOS控件的值时,“绑定”不是两个=方式。要实现您想要的功能,您需要将Xamarin.Forms Slider绑定到viewmodel中的值,然后在渲染器中更改viewmodel中的值。
如果绑定所有属性(最小值,最大值,值,进度),则会更容易