Минимум Xamarin Slider сбрасывает связанное значение в UWP

Я заметил нежелательное поведение Xamarins Slider в UWP, если я использую свойство Minimum. скажем

<Slider Value="{Binding SliderValue}" Maximum="20" Minimum="10"/>

связан с

public double SliderValue { get; set; } = 15;

Это означает, что исходное положение ползунка должно быть ровно посередине. Но: Во время запуска, после того как ползунок получил значение (15), он устанавливает значение обратно на минимум (10). Ползунок теперь находится в минимальном левом положении. При использовании Minimum="0" ползунок не возвращает свое значение, и исходное положение соответствует ожидаемому. Я также попытался изменить порядок свойств ползунка в моем XAML, но результат все тот же.

Проблема не возникает, если я запускаю приложение на Android. Android не устанавливает минимальное значение привязки.

Кто-нибудь знает, в чем может быть проблема и/или как ее исправить?


person Fruchtzwerg    schedule 19.07.2017    source источник
comment
Вы пробовали что-то вроде ‹Максимум слайдера=20 Минимум=10 Value={Binding SliderValue}/› . Я не уверен, что это сработает, но UWP сбрасывает значение при изменении максимума или минимума, поэтому порядок может помочь.   -  person Ivan Ičin    schedule 19.07.2017
comment
Да @IvanIčin Я тоже думал об этом поведении и безуспешно пробовал все возможные комбинации.   -  person Fruchtzwerg    schedule 19.07.2017
comment
Тогда единственный ответ, который я знаю, - это иметь привязку TwoWay и обрабатывать значение там. Если вы видите запрос на ползунок до 10, это не имеет смысла, вы не принимаете его и отправляете свойство изменено. Я опубликую ниже.   -  person Ivan Ičin    schedule 19.07.2017


Ответы (1)


Решение 2. Если ваши максимальные и минимальные значения постоянны, решение 1 слишком сложное. Я бы предложил просто связать все три значения:

<Slider Value="{Binding SliderValue, Mode = TwoWay}" 
Maximum="{Binding Maximum, Mode = OneWay}" 
Minimum="{Binding Minimum, Mode = OneWay}"/>

И затем, когда вы инициализируете ViewModel, убедитесь, что эти значения установлены в правильном порядке (может потребоваться сделать это при инициализации представления для правильной работы):

Minimum = 10;
Maximum = 20;
SliderValue = 15;

Решение 1. Возможно, есть лучшие ответы, но я могу только предложить использовать привязку TwoWay:

<Slider Value="{Binding SliderValue, Mode = TwoWay}" Maximum="20" Minimum="10"/>

Затем в ViewModel вы обрабатываете ситуацию, например:

private double sliderValue = 15;
public double SliderValue
{
    get
    {
        return sliderValue;
    }
    set
    {
        if (logicToCheckIfValueMakesSense())
        {
            sliderValue = value;
        }
        onPropertyChanged(nameof(SliderValue));
    }
}
person Ivan Ičin    schedule 19.07.2017