Форум программистов, компьютерный форум, киберфорум
C#: XAML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205

Avalonia (как сделать активной определенную вкладку)

12.01.2022, 22:19. Показов 9334. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Как в Авалонии сделать, чтобы при нажатии на кнопку на первой вкладке TabControl, включалась вторая вкладка tabControl? Заранее спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2022, 22:19
Ответы с готовыми решениями:

Сделать активной определенную вкладку tabControl
Банальный вопрос, но не могу найти Как сделать, чтобы при нажатии на кнопку на первой форме, включалась вторая вкладка tabControl на...

Как при открытии дочернего окна сделать активной вкладку в TabControl?
MDI интерфейс. В родительской форме кнопка для открытия дочерней. Как при открытии сделать активной определенную вкладку на дочерней форме?

Сделать определенную вкладку активной
Добрый день, суть вопроса: Есть страница с вкладками (табами) - как при переходе с другой страницы на страницу с табами делать...

82
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 08:10  [ТС]
Студворк — интернет-сервис помощи студентам
Скажите, пожалуйста, можно ли

C#
1
DoTheThing = ReactiveCommand.Create(Calc_click);
написать не в конструкторе первой модели Tab1ViewModel?

Добавлено через 10 минут
Цитата Сообщение от limeniye Посмотреть сообщение
Модель будет содержать число. Обе ViewModel'и будут "слушать" какое в данный момент значение числа и если оно изменится -- изменять его у себя.
Если можно, приведите, пожалуйста, пример (если изменить проект TestTabNavigationForCyberForm.7z). Заранее благодарна!
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 09:35
написать не в конструкторе первой модели Tab1ViewModel?
Не понял в чём суть вопроса.
Например?
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 09:40  [ТС]
limeniye, в Вашем примере

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using AvaloniaApplication1.Common;
using ReactiveUI;
using System.Reactive;
 
namespace AvaloniaApplication1.ViewModels
{
    public class Tab1ViewModel
    {
        public TabChangingEventArgs TabChanging;
        public ReactiveCommand<Unit, Unit> DoTheThing { get; }
        public Tab1ViewModel() => DoTheThing = ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1));
    }
}
можно ли ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1)) написать не в конструкторе?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 09:45
Пытаюсь снова уловить Вашу логику.

Скажите пожалуйста, а зачем?


Используйте теги "C#" для кода C#, а не XML.
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 09:50  [ТС]
У меня сейчас сделано вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using AvaloniaApplication1.Common;
using ReactiveUI;
using System.Reactive;
 
namespace AvaloniaApplication1.ViewModels
{
    public class Tab1ViewModel
    {
        public TabChangingEventArgs TabChanging;
        public ReactiveCommand<Unit, Unit> DoTheThing { get; }
        public Tab1ViewModel()
     {
        DoTheThing = ReactiveCommand.Create(Calc_click);
     }
}
 
public void Calc_click()
{
  ....
  Run();
  TabChanging?.Invoke(this, 1));
}
Добавлено через 1 минуту
Получается, что метод Calc-click по нормальному не работает, работает только переключение вкладки

C#
1
TabChanging?.Invoke(this, 1));
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 09:52
Ага, хорошо. А как Вы хотите, но у Вас не получается?

Добавлено через 54 секунды
по нормальному не работает
Что Вы имеете ввиду?
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 09:56  [ТС]
Хотелось бы, что метод Calc-click передавал посчитанные данные на другую вкладку.

Добавлено через 1 минуту
Или может быть надо как то по другому делать, как Вы писали:

Цитата Сообщение от Sun1212 Посмотреть сообщение
Модель будет содержать число. Обе ViewModel'и будут "слушать" какое в данный момент значение числа и если оно изменится -- изменять его у себя.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 10:29
Так, а конструктор тут при чём?

Давайте по порядку. Что происходит в коде, который Вы мне отправили?
Запускается метод Run, он что-то там делает, потом страница переключается на вторую.

По идее всё гуд, вопрос прежний: что с конструктором не так и при чём тут он?

Добавлено через 23 минуты
Я пока оставлю Вашу затею, ибо не понимаю её суть.

Немного освижу тему.
В посте #60 я описал, как передать какое-то значение в модель.

Напомню пример с МакДональдсом. Вы заказали бургер, бургер принесли на стиллаж, Вам осталось его забрать.
Работники фастфуда — это Tab1ViewModel, она просто доставляют данные в Model, Вы — это Tab2ViewModel, Вам нужно забрать бургер, а следовательно — забрать данные из Model.

Таким же способом как я отправил данные в Model, можно их также считать оттуда.

Но мы ведь не знаем когда именно в Model придёт новое значение. В таком случае я предложил сделать временное решение для Tab2ViewModel. Я предложил сделать бесконечный цикл, который будет постоянно "слушать" значение Result из Model.

То есть в Tab1ViewModel Вы изменяете значение в Model, а в Tab2ViewModel Вы "слушаете" когда это значение изменится.
2
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 17:26  [ТС]
limeniye, спасибо большое! На простом примере всё получилось!
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 17:33
Sun1212, да ну. По идее у Вас должно было окно залагать. Точно получилось?
Код в студию.
1
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 17:52
Sun1212, проверил -- окно даже не открывается :/

Вы должны были сказать "у меня залагивает приложение" и тогда бы я пояснил за потоки, но если помощь не нужна, я выложу всё-таки код:
C#
1
2
3
4
    public class Model
    {
        public static int Result { get; set; } = 0;
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class Tab1ViewModel
    {
        public TabChangingEventArgs TabChanging;
        public ReactiveCommand<Unit, Unit> DoTheThing { get; }
        public Tab1ViewModel()
        {
            DoTheThing = ReactiveCommand.Create(() => DoTheThingExecute());
        }
 
        private void DoTheThingExecute()
        {
            Model.Result += 5;
            TabChanging?.Invoke(this, 1);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public class Tab2ViewModel : ReactiveObject
    {
        private int _result = 123;
        public int Result
        {
            get => _result;
            set => this.RaiseAndSetIfChanged(ref _result, value);
        }
 
        public Tab2ViewModel()
        {
            Task.Run(() =>
            {
                while (true)
                {
                    Result = Model.Result;
                }
            });
        }
    }



Архив прикрепляю соответственно:
TestTabNavigationForCyberForm Final.7z
2
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 19:57  [ТС]
limeniye, у меня вроде получилось, выкладываю код
Вложения
Тип файла: zip MyTest.zip (512.9 Кб, 3 просмотров)
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 20:07

Не по теме:

Еду в метро, запустить код не могу, НО



Вы уверены что он работает?

В следующем коде у Вас нажатие на кнопку. Потом создаётся ViewModel в свойство Result которой присваивается цифра 5.
Но суть в том, что больше с этой ViewModel ничего не происходит. Вы создали объект, но Вы его нигде не используете.
C#
1
2
3
4
5
6
7
8
9
10
public void Calc_click()
        {
            int sum = 5;
           
            Tab2ViewModel model_2 = new Tab2ViewModel();
 
            model_2.Result = sum;
 
            TabChanging?.Invoke(this, 1);
        }
Второй момент, который меня смутил:
объясните, пожалуйста, а зачем Вы сделали это?
C#
1
private void OnTabChanging(object sender, int index) => SelectedTabIndex = index;
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 20:21  [ТС]
Цитата Сообщение от limeniye Посмотреть сообщение
Второй момент, который меня смутил:
объясните, пожалуйста, а зачем Вы сделали это?
C#Выделить код
1
private void OnTabChanging(object sender, int index) => SelectedTabIndex = index;
Это для реализации события - переключение вкладки
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 20:29
Sun1212, вот тут SelectedIndex="{Binding SelectedTabIndex}" происходит то же самое.
По своей сути: Вы намазали масло — маслом. Ладно, это была бы не проблема, если бы Вы пробросили событие через бехевиор, но в данном случае Вы нарушили паттерн MVVM: у Вас ViewModel "знает" про View.

Если же Вы хотели получить "полный биндинг", можно было просто указать SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}".

Глянуть можете тут.
2
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 20:40  [ТС]
limeniye, с Вами согласна, спасибо большое!!!

Можете посоветовать литературу/cайты для изучения Авалонии.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 21:00
https://www.cyberforum.ru/wpf-... st15975248
Три поста на Ваш вкус и цвет.

Если от себя что-то посоветовать — то я советую про Avalonia, на данном этапе, даже не задумываться.
В проекте, который я Вам показал, очень много костылей (прям очень много).Я старался соблюдать баланс между простотой и более-менее адекватным кодом. Но я чувствовал, что веду монолог сам с собой, потому что у Вас нет базового понимания MVVM, а задача для среднего уровня.

Это как: Вы получили вчера права, а сегодня сели за руль Ламборгини.

В любом случае, я и сам не люблю, когда меня кто-то отговаривает от моих планов. Решать Вам, но если тематика действительно интересна — советую временно перейти на базовый уровень.

Вы должны понимать как всё это работает "под капотом": Avalonia, Uno, UWP, WPF — все они, по сути, схожи.
Я не Avalonia разработчик, но, как видите, это не проблема — потому что я знаю как оно работает "внутри".
2
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
20.01.2022, 21:32  [ТС]
limeniye, благодарю за советы и ссылки!!!
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.01.2022, 22:00

Не по теме:


Угу. Всегда рад помочь!



Ещё такой вопрос: зачем Вам Tab'ы? По заданию? Просто код можно раз в 10 упростить, если не использовать этот элемент.

Добавлено через 37 секунд
Можно сделать переключение по страницам — это вообще одна строка.
1
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
21.01.2022, 19:35  [ТС]
Вкладки нужны по заданию.

А это как?

Цитата Сообщение от limeniye Посмотреть сообщение
Можно сделать переключение по страницам — это вообще одна строка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2022, 19:35

Как сделать активной вкладку TPageControl
Создано MDI-приложение. На дочернем окне расположен компонент TPageControl Необходимо, что-бы при выборе пункта главного меню...

Как в Pagecontrol новую (созданную) вкладку сделать активной?
как в Pagecontrol новую(созданую) вкладку сделать активной? при нажатии на кнопку создаеться новая вкладка, как ее сделать активной?

Как сделать вкладку активной, если разные маршруты?
Всем привет!) Есть такая верстка &lt;div class=&quot;tabbable&quot;&gt; &lt;ul class=&quot;nav nav-tabs catalog&quot; id=&quot;main-tab&quot;&gt;...

Сделать вкладку активной при загрузке страницы
Добрый день. Есть страница: sspromo.ru/ticket.php ,тело которой сделано из вкладок, которые открывают части стр... При первом попадании на...

Как перейти на определенную вкладку?
У меня на форме имеется елемент с вкладками. Как программно перейти на ту или иную вкладку? Попробовал MyTabs.TabIndex = 2. Не получается.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru