Как передавать значение из переменной C# в Slider Maximum (XAML) хоть сколько раз?

Умоляю, прошу помогите кто знает. С этим 2 недели мучаюсь. Нужно из переменной при нажатии на кнопку перенести значение в Slider Maximum и сделать так, чтобы она могла изменяться. То есть: первый раз нажал на кнопку - у слайдера максимальное значение отправилось 10, второй раз нажал на кнопку - у slider maximum значение поменялось на другое и так хоть сколько раз. У меня получилось(это совсем было не сложно, я уверен с этим каждый начинающий даже справиться) сделать передачу из кнопки, но я не понимаю, что нужно сделать чтобы как-бы “забиндивать” данную переменную в slider maximum.

 
        class Perv
        {


            public static double d;//изменяю её
            public static void Favorite_Clicked(object sender, EventArgs args)
            {
                VtorClass.Max = d;//я знаю, что можно изменять напрямую(не прибегая к переменной d, её написал просто чтобы было наглядно понятно где изменяется данные,
                //может для примера написать цикл for с этой переменной, но сути не меняет: данная переменная изменяется и при нажатии на кнопку должна меняться переменная обозначающая максимальное возможное число slider maximum

            }
            
        }
        public class VtorClass
        {
            public static double Max;
        }
        public class Tri
        {
            //это класс, где (если должна) содержатся логика присваивания slider maximum значение
        }

Также пробовал вариант: Maximum=“{x:Static local:VtorClass.Max}”, но у него есть проблема - он работает, но работает только один раз при запуске, дальше если будешь менять ту переменную - она меняется только в классе, а свойство Maximum к ней не обращается(не реагирует).

Надо сделать свойство с INotifyPropertyChanged или типа того.
How to: Implement Property Change Notification - WPF .NET Framework | Microsoft Learn

Это должно быть в любых норм учебных материалах по WPF/XAML потому что биндинг это ж и есть основной способ работы с этой технологией.

Вы гораздо лучше разбираетесь во всём этом чем я, могли бы Вы подсказать:

Я попробовал, то что Вы рекомендовали, и правда работает, значения передаёт, но передаёт только одно, если писать через -

        public void OnPropertyChanged(double x)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(x));
        }
        public event PropertyChangedEventHandler PropertyChanged;
        private static double d = 3;
        public  double Mx
        {
            get => d;
            set
            {
                OnPropertyChanged(nameof(Mx));
            }
        }
        public void Dada(object sender, System.EventArgs e) //кнопка
        {
            d += 1;
        }

, то он выдаёт ошибку CS1503 Аргумент 1: не удается преобразовать из “double” в “string”.
попробовал через PropertyChangedEventHandler, но в данном случае - CS0149 Требуется имя метода.

Я считаю, что сделать данную задумку должно быть легко, так как такая вещь довольна часто используется(привязка double из C# в переменную Xaml’а, но как её сделать не пойму).

Не могли бы Вы мне помочь пожалуйста?
Вы гораздо лучше в программировании разбираетесь, чем я, очевидно сделали не один и не 10 проектов.

Тут странное что-то написано, по ссылке выше не так же. Надо сделать обычное свойство, которое возвращает/изменяет поле, и после изменения вызывает OnPropertyChanged, чтоб оповестить об этом. И по кнопке надо Mx, а не d менять.

1 лайк
 public double Mx = 1;
        public void Dada(object sender, EventArgs e)
        {
            
            Mx += 1;
            "x:Name вашего Slider".Maximum = Mx;
        }


Вы абсолютно правы! Выражаю Вам огромную благодарность. Я чу чуть доработал.)

Теперь другая проблема: в главной странице(от куда запускаются другие страницы)(у меня эта страница имеет тип Shell) так сделать не выходит, дело даже не в INotifyPropertyChanged или Binding, а просто в том, что x:Name который присвоен Slider’у не забивается генерацией в класс NamePage.xaml.g.cs. Что интересно: во всех остальных классах(страницах) всё автоматически вбивается для вызова из кода c# этой же страницы, а в главную страницу - Shell - нет.

Пробовал в ручную вбить x:Name - получилось, но через раз компиляции и сборки проекта программа сама удаляет эти данные, а если они остались, то ссылки, которые используешь в c# -
“x:Name вашего Slider”.Maximum = Mx; - вот именно эта “x:Name вашего Slider” является null.

И что делать с этим null - знают только хорошие программисты.

Также пробовал перенести Shell по другим папкам или в другой класс(как экземпляр Shell и как ссылку на созданный в основном классе) - ничего: либо другие ошибки, либо просто создаётся, но без slider и без цвета(то есть пустой, без элементов), либо ещё что-нибудь, что может только быть.

Если кто-то это прочитает и знает ответ или возможность, или способ, хоть блин что-то, что может решить такую задачку - умоляю помогите, я блин по 16 часов сижу за этой … почти каждый день, хоть тресни - не понимаю.

(Извините за нытьё).

А что в XAML? Может он как-то не так написан был?

И может удобнее просто прибиндить Mx к Maximum слайдера?

В XAML в строке Slider написаны характеристики и x:Name=“Slider” и вот по данному имени в c# обратиться не могу как и описал выше более подробно. Пока выяснил такую штуку: если объект с x:Name содержится в Layout (или это без разницы, вообще имеется ввиду в другом объекте XAML) то он не виден для C#.

Так покажите весь код/кусок кода.

XAML

  <Shell.ItemTemplate>
                    <DataTemplate >
                        <FlexLayout BackgroundColor="#5A5A5A" Direction="Column" VerticalOptions="FillAndExpand" >
                            <Grid BackgroundColor="#5A5A5A" FlexLayout.Grow="3.57">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                    <RowDefinition Height="0.1*"/>
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.75*"/>
                                    <ColumnDefinition Width="0.25*"/>
                                </Grid.ColumnDefinitions>
                                <Slider Grid.Row="1"  ThumbColor="#00FFF0"  ValueChanged="ValueChanged" x:Name="slider"  MinimumTrackColor="#00FFF0" />
                            </Grid>
                        </FlexLayout>
                    </DataTemplate>
                </Shell.ItemTemplate>

C#

 public double Value = 10;
        public void Main()
        {
            Shell.Current.FlyoutIsPresented = true;
            slider.Maximum = Value; //вот к этой штуке нужно как-то обратиться
        }

Так это ж ItemTemplate. Итемов обычно может быть несколько. Если назначать имя, то как определить из какого итема брать?

Item один. А подскажите пожалуйста как через него обозначить, чтобы брать?

А зачем тогда через ItemTemplate?

Я пересмотрел проект, извините за ложную информацию, да itemtemplate несколько.

Так я не про это. ItemTemplate обычно нужен, чтобы описать элемент списка.
А тут он для чего?

Если это Shell из Xamarin, то вроде бы он обычно не так используется.

Я использовал Item для редактирования выдвижной панельки, вот такой:
flyout-large.png (800×760) (microsoft.com)

Элементы внутри такого можно искать более сложными способами How to: Find DataTemplate-Generated Elements - WPF .NET Framework | Microsoft Learn

Но обычно это не нужно и лучше решать задачу через биндинг.