Позиция 15:21.EventHandler "OnSliderValueChanged" не найден в типе "MyApp.Views.SettingsPage"
Означает, что у вас нет EvenHandler
с именем "OnSliderValueChanged" в MyApp.Views.SettingsPage
.Где это должно быть, так как вы указываете на это в XAML -> ValueChanged="OnSliderValueChanged"
.Поэтому либо определите его на своей странице, либо удалите его из XAML.
Относительно вашей проблемы, поскольку вы используете привязки Value="{Binding MaxProductsToOffer}"
Я предполагаю, что вы придерживаетесь шаблона MVVM в своем проекте и у вас есть выделенный ViewModel
привязан к MyApp.Views.SettingsPage
.Если это так, то все, что вам нужно сделать, это связать Slider.Value
с целочисленным свойством в ViewModel
, которое будет автоматически обрабатывать преобразование для вас.Вот решение, которое не требует какого-либо кода:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:SliderTest"
x:Class="SliderTest.MyPage"
Padding="50">
<ContentPage.BindingContext>
<local:MainViewModel />
</ContentPage.BindingContext>
<ContentPage.Content>
<StackLayout>
<Slider x:Name="slider" Maximum="5" Minimum="1" Value="{Binding SliderValue}" />
<Label Text="{Binding Source={x:Reference Name=slider}, Path=Value}" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
public class MainViewModel : INotifyPropertyChanged
{
int sliderValue;
public int SliderValue
{
get => sliderValue;
set
{
sliderValue = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
В качестве альтернативы вы можете: расширить Slider
и использовать частный EventHandler для манипулирования значением или использовать EventHandler на вашей странице.Пример кода можно найти здесь .Однако я нахожу это излишним сравнением с моим первоначальным предложением.
PS: Если вы используете MVVM, предпочитайте решения, которые не предполагают написание кода на уровне пользовательского интерфейса, если это действительно не нужно.