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

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

12.01.2022, 22:19. Показов 9120. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru