Умоляю, прошу помогите кто знает. С этим 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 к ней не обращается(не реагирует).
Вы гораздо лучше разбираетесь во всём этом чем я, могли бы Вы подсказать:
Я попробовал, то что Вы рекомендовали, и правда работает, значения передаёт, но передаёт только одно, если писать через -
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 менять.
Теперь другая проблема: в главной странице(от куда запускаются другие страницы)(у меня эта страница имеет тип 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 в строке Slider написаны характеристики и x:Name=“Slider” и вот по данному имени в c# обратиться не могу как и описал выше более подробно. Пока выяснил такую штуку: если объект с x:Name содержится в Layout (или это без разницы, вообще имеется ввиду в другом объекте XAML) то он не виден для C#.
public double Value = 10;
public void Main()
{
Shell.Current.FlyoutIsPresented = true;
slider.Maximum = Value; //вот к этой штуке нужно как-то обратиться
}