MAUI:点击下方时如何禁用Slider的DragCompletedCommand

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

使用 this 线程,我在我的 MAUI 应用程序上实现了滑块减少预防逻辑。

但是我在

DragCompletedCommand
中也有一个
Slider
,它会执行一些操作。此时,当单击滑块上的下部时间时,
DragCompletedCommand
也会点击并执行这些操作。我怎样才能禁用它?

我尝试如下:在

bool
上添加了
viewmodel
变量,并在执行操作之前检查它的值。

public ICommand DragCompletedCommand => new Command(OnDragCompleted);

private void OnDragCompleted(object obj)
{
    if (invokeDragCompleted)
    {
        //My actions
    }
}

我正在从

bool
页面的
homepage.xaml.cs
事件设置
ValueChanged
值。

public void SliderValueChanged(object sender, ValueChangedEventArgs args)
{
    try
    {
        Slider slider = (Slider)sender;
        IsIncrease = args.NewValue > args.OldValue;
        if (!IsIncrease)
        {
            hpvm.InputTransparent = true;
            slider.Value = args.OldValue;
            value = args.OldValue;
            hpvm.invokeDragCompleted = false;
        }
        else
        {
            hpvm.InputTransparent = false;
            slider.Value = args.NewValue;
            value = args.NewValue;
            hpvm.invokeDragCompleted = true;
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine("Exception:>>" + ex);
    }
}

但是当计时器运行并交替命中 if 和 else 块时,此事件总是会触发。因此

bool
值从这里变为 true 并在
Viewmodel
上执行操作。选择较低时间时,有什么方法可以将
bool
值设置为 false?

我的滑块代码:

<Slider 
    x:Name="watchme_slider"
    Grid.Column="1"
    BackgroundColor="White"
    MinimumTrackColor="#1c98d7"
    MaximumTrackColor="#9a9a9a"
    ThumbImageSource="ic_thumb_xx.png"
    ValueChanged="SliderValueChanged"
    InputTransparent="{Binding InputTransparent}"
    Maximum="0.166666667"
    Minimum="0"
    DragCompletedCommand="{Binding DragCompletedCommand}"
    HorizontalOptions="FillAndExpand"/>

计时器在触发

ValueChanged
事件的每一秒运行。如果用户触摸或拖动滑块,此时也会触发
ValueChanged
事件。有什么办法可以找到触发了哪种类型的事件吗?

slider maui
1个回答
0
投票

您在

slider.Value = args.NewValue;
事件中设置
SliderValueChanged
。这就是 if 和 else 块都被命中的原因。

根据我的理解,您想要在

DragCompletedCommand
中执行一些操作,仅当滑块增加其值时。对吗?

我可能会添加一个新字段,或者将其称为

preValue
中的
ViewModel
来存储滑块之前的值。

private double preValue;

并检查当前值是否更大,

    [RelayCommand]
    public void DragCompleted(object obj)
    {
        var slider = obj as Slider;
        if (slider.Value > preValue)
        {
            Debug.WriteLine("do some work");
            preValue = slider.Value;
        }
    }

这是 XAML,我使用 Maui CommunityToolkit 中的 EventToCommandBehavior

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         ...
         Title="HomePage"
         xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
         x:Name="page">

    <Slider 
        x:Name="watchme_slider"
        Grid.Column="1"
        BackgroundColor="White"
        MinimumTrackColor="#1c98d7"
        MaximumTrackColor="#9a9a9a"
        ThumbImageSource="ic_thumb_xx.png"
        ValueChanged="SliderValueChanged"
        InputTransparent="{Binding InputTransparent}"
        Maximum="0.166666667"
        Minimum="0"     
        HorizontalOptions="FillAndExpand">
        <Slider.Behaviors>
            <toolkit:EventToCommandBehavior
            EventName="DragCompleted"
            Command="{Binding Source={x:Reference page}, Path=BindingContext.DragCompletedCommand}"
            CommandParameter="{Binding Source={x:Reference watchme_slider}}"
                />
        </Slider.Behaviors>
    </Slider>
© www.soinside.com 2019 - 2024. All rights reserved.