0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205

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

12.01.2022, 22:19. Показов 9248. Ответов 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
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 19:38
Студворк — интернет-сервис помощи студентам
Чтобы Вам было проще понять, я сделаю Result статическим (хоть это и не правильно).

C#
1
2
3
4
    public class Model
    {
        public static int Result { get; set; } = 0;
    }
Добавлено через 43 секунды
Цитата Сообщение от Sun1212 Посмотреть сообщение
Попроще можно сделать?
Не-а, у Вас задача на MVVM.

Не поняв MVVM -- дальше не продвинитесь.

Добавлено через 1 минуту
Sun1212, ну как сложно -- в реализации минут 5. В объяснениях -- около двух часов.
Это много?
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 19:39  [ТС]
limeniye, а как сделать, чтобы обе ViewModel'и "слушали", какое в данный момент значение числа?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 19:52
Sun1212, для этого есть "события", но пока что обойдёмся без них.

Для простого понимания -- можно сделать бесконечный цикл, который будет постоянно "слушать" Model.

Во ViewModel у Вас будет тоже такое свойство(Result), но с "обратнрым вызовом". Обратный вызов -- это реализация в фигурных скобках this.RaiseAndSetIfChanged(ref _resultIndex, value (вот это, но пока Вам рано с этим разбираться):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public class Tab2ViewModel : ReactiveObject
    {
        private int _result;
        public int Result
        {
            get => _result;
            set => this.RaiseAndSetIfChanged(ref _result, value);
        }
 
        public TabChangingEventArgs TabChanging;
        public ReactiveCommand<Unit, Unit> DoTheThing { get; }
        public Tab2ViewModel()
        {
            DoTheThing = ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1));
 
            while(true)
            {
                Result = Model.Result;
            }
        }
    }
Когда у Вас измениться Result в ViewModel, у Вас вызовится RaiseAndSetIfChanged, который скажет Вашей View, что данные изменились.
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 20:27  [ТС]
Этот код переместила для первой модели Tab1ViewModel (на первой вкладке кнопка "Сформировать")


public class Tab2ViewModel : ReactiveObject
{
private int _result;
public int Result
{
get => _result;
set => this.RaiseAndSetIfChanged(ref _result, value);
}

public TabChangingEventArgs TabChanging;
public ReactiveCommand<Unit, Unit> DoTheThing { get; }
public Tab2ViewModel()
{
DoTheThing = ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1));

while(true)
{
Result = Model.Result;
}
}
}
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 20:32
Цитата Сообщение от Sun1212 Посмотреть сообщение
для первой модели Tab1ViewModel
Для первой вью-модели*.

Но зачем для первой ViewModel'е, если там цифра "2" -- Tab2ViewModel*?

У Вас на первой странице происходит клик, а вторая "слушает" изменения.

Используйте теги C#, для посветки соответствующего синтаксиса
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 20:34  [ТС]
limeniye,
Цитата Сообщение от limeniye Посмотреть сообщение
Но зачем для первой ViewModel'е, если там цифра "2" Tab2ViewModel*?
Где цифра "2"?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 20:35
Tab_______2_______ViewModel

public class Tab2ViewModel : ReactiveObject
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 20:41  [ТС]
limeniye, поняла), вторая вкладка будет следить за событиями на первой)

Добавлено через 4 минуты
На первой вкладке будет обработчик кнопки?

<Button Content="Далее" Command="{Binding Сalc_click}" />

Command="{Binding DoTheThing}" - удаляю, правильно я поняла?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 20:44
Цитата Сообщение от Sun1212 Посмотреть сообщение
limeniye, поняла), вторая вкладка будет следить за событиями на первой)
Супер, да.

Но формулировка не совсем верная.

Вторая вкладка будет следить за изменениями Модели, а вот Модель будет изменять первая вкладка.

Представьте, что Вы заказали еду в МакДональдсе.

Сотрудник донесёт Ваш бургер от кухни до кассы, а дальше Вы сами должны подойти и забрать этот бургер, Вам его не принесут.

Кухня -- это первая вкладка. Касса -- Model, из которой вторая вкладка берёт свой бургер.

Или, допустим, Вы хотите попить. Да, Вы можете отхлебнуть из под крана -- но это костыль. Вам нужно промежуточное звено -- кружка.

Добавлено через 1 минуту
Цитата Сообщение от Sun1212 Посмотреть сообщение
На первой вкладке будет обработчик кнопки?
<Button Content="Далее" Command="{Binding Сalc_click}" />
Command="{Binding DoTheThing}" - удаляю, правильно я поняла?

Один Вы удаляете, один оставляете, но как именно он у Вас называется в VM -- я не знаю. В VM, которую я предложл он назвается DoTheThing, поэтому привязка у меня и идёт к нему.

Используйте кнопку XML над полем ввода, чтобы подстветить xaml код.
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 20:51  [ТС]
limeniye, мне надо, чтобы привязка сначала была на Расчет (calc_click), а уже потом перейти на другую вкладку.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 21:07
Цитата Сообщение от Sun1212 Посмотреть сообщение
limeniye, мне надо, чтобы привязка сначала была на Расчет (calc_click), а уже потом перейти на другую вкладку.

Давайте разобьём Вашу задачу на две:

- Вам нужно перейти на другую страницу нажатием на кнопку;
- Вам нужно изменить значение.

Как перейти на другую страницу я показал в этом посте и оставил архив с проектом.

Осталось только изменить значение на второй странице.

Как я понял, на второй странице Вам не нужна кнопка, только на первой.
Поэтому я её удалю и комманду для неё тоже.
Обращайте внимание где Tab1, а где Tab2, чтобы не запутаться.
Удалил кнопку на второй странице:

XML
1
2
3
<UserControl x:Class="AvaloniaApplication1.Views.Tab2UserControl" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
</UserControl>
Удалил комманду для кнопки на второй странице:
C#
1
2
3
4
5
6
    public class Tab2ViewModel : ReactiveObject
    {
        public Tab2ViewModel()
        {
        }
    }
Далее я просто на второй странице хочу отобразить число. Обычное, не изменяемое число.
Что мне для этого нужно:
- свойство во ViewModel
- TextBlock и биндинг.

Добавляю в ViewModel второй страници новое свойство, которое я буду отображать на втором табе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class Tab2ViewModel : ReactiveObject
    {
        private int _result = 123;
        public int Result
        {
            get => _result;
            set => this.RaiseAndSetIfChanged(ref _result, value);
        }
 
        public Tab2ViewModel()
        {
        }
    }
Создал TextBlock на второй странице и брибиндил его Text к свойству Result.
XML
1
2
3
4
5
<UserControl x:Class="AvaloniaApplication1.Views.Tab2UserControl" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
    <TextBlock Text="{Binding Result}"/>
 
</UserControl>
Название: Tab2_123.png
Просмотров: 71

Размер: 2.3 Кб

Советую скачать новый архив:
TestTabNavigationForCyberForm.7z
1
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 21:11
Что, пока что, не ясно? Спрашивайте.
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 21:48  [ТС]
limeniye, спасибо, что подробно объяснили, но от меня другое требуют, нужно чтобы по нажатию кнопки сначала осуществился Расчет, а потом переход на другую вкладку.
Т.е., чтобы 123 был задан не во второй модели, а появился при нажатии на кнопку.

Добавлено через 3 минуты
Если мы для кнопки удалим привязку DoTheThing, а напишем Command={Binding Calc_click}, то как лучше сделать переход на другую вкладку?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 21:52
Цитата Сообщение от Sun1212 Посмотреть сообщение
limeniye, спасибо, что подробно объяснили, но от меня другое требуют, нужно чтобы по нажатию кнопки сначала осуществился Расчет, а потом переход на другую вкладку.
Т.е., чтобы 123 был задан не во второй модели, а появился при нажатии на кнопку.

Я же иду постепенно!

Добавлено через 30 секунд
Покажите Ваш Calc_click
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 21:53  [ТС]
Или попробовать в привязку DoTheThing в ReactiveCommand.Create добавить еще код для Расчета?

XML
1
2
DoTheThing = ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1));
                                                                       Calc();
Можно так?
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 21:57
Цитата Сообщение от Sun1212 Посмотреть сообщение
Можно так?
Угу. Так можно, но не сейчас.

Добавлено через 2 минуты
Для начала нужно сделать связь Model к ViewModel.

Я там сделал Tab2ViewModel и оставил пустой конструктор.

Пустой констркутор я оставил для Вас.

Вам нужно создать класс Model, который я уже упоминал выше.

В нём тоже есть Result.

Я бы хотел, чтобы 123 Вы получили не из ViewModel, как на данный момент, а из Model. Управитесь?
0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
18.01.2022, 22:00  [ТС]
limeniye, спасибо! Я завтра попробую, потом напишу
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
18.01.2022, 22:01
Цитата Сообщение от Sun1212 Посмотреть сообщение
limeniye, спасибо! Я завтра попробую, потом напишу

Не по теме:

угу

0
0 / 0 / 0
Регистрация: 12.12.2021
Сообщений: 205
19.01.2022, 08:31  [ТС]
Цитата Сообщение от Sun1212 Посмотреть сообщение
Или попробовать в привязку DoTheThing в ReactiveCommand.Create добавить еще код для Расчета?
XMLВыделить код
1
2
DoTheThing = ReactiveCommand.Create(() => TabChanging?.Invoke(this, 1));
                                                                       Calc();
Не получается так сделать
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
19.01.2022, 09:23
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DoTheThing = ReactiveCommand.Create(OnSomethingExecute);
 
 
 
 
private void OnSomethingExecute()
{
    double sum = 1 + 2;
 
    // Задали Result новое значение из первой ViewModel'и
    Model.Result = sum;
 
    // Изменили страницу
    TabChanging?.Invoke(this, 1);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2022, 09:23

Как сделать активной вкладку 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. Не получается.


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

Новые блоги и статьи
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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru