我需要一个滑块事件,只有当用户结束触摸控件时它才会触发

问题描述 投票:2回答:1

我的需求:我需要一个滑块事件,它只有在用户结束触摸控件时才会触发

定制控制:

 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属性)正在更新,但滑块始终显示完整的进程

slider xamarin.forms
1个回答
0
投票

当您的渲染器更改iOS控件的值时,“绑定”不是两个=方式。要实现您想要的功能,您需要将Xamarin.Forms Slider绑定到viewmodel中的值,然后在渲染器中更改viewmodel中的值。

如果绑定所有属性(最小值,最大值,值,进度),则会更容易

© www.soinside.com 2019 - 2024. All rights reserved.