Форум программистов, компьютерный форум, киберфорум
C#: XAML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 18.07.2021
Сообщений: 12

Не могу связать команду с методом при использовании CommunityToolkit.Mvvm Avalonia

05.11.2024, 12:41. Показов 1729. Ответов 9

Студворк — интернет-сервис помощи студентам
Не понимаю в чём дело. Проект компилируется нормально, но кнопка "Подключиться" неактивна - не неё нельзя нажать.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaApplication1.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" Width="300" Height="250"
        x:Class="AvaloniaApplication1.Views.DBConnect"
        x:DataType="vm:DBConnectViewModel">
        
 
    <Design.DataContext>
        <!-- This only sets the DataContext for the previewer in an IDE,
             to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
        <vm:DBConnectViewModel/>
    </Design.DataContext>
    <StackPanel >
        <Button Command="{Binding Conn}" HorizontalAlignment="Center">Подключиться</Button>
    </StackPanel>
 
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace AvaloniaApplication1.ViewModels
{
    partial class DBConnectViewModel : ViewModelBase
    {
#pragma warning disable CA1822 // Mark members as static
        [RelayCommand]
        public void Conn()
        {
            Console.WriteLine("hello");
        }
 
#pragma warning restore CA1822 // Mark members as static
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2024, 12:41
Ответы с готовыми решениями:

Как при использовании свойства DataGrid.RowDetailsTemplate вызвать команду? MVVM
Есть таблица с определенными данными допустим пусть в каждой строке будут два значения a и b надо чтобы в RowDetailsTemplate выводился...

CommunityToolkit.Mvvm и потоки
Модель представления с обработкой события потери соединения выдает ошибку &quot;Данный тип CollectionView не поддерживает изменения в своем...

Custom Source Generators + CommunityToolkit.Mvvm в ViewModel
1. Возможно ли совместное использование в одной ViewModel? Сомнения связаны с тем, что каждый из генераторов создаёт свой *.g.cs...

9
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
05.11.2024, 12:56
Ilyamu, активна просто у нее анимация нажатия фиговое и глазом не видать что происходит нажатие.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
05.11.2024, 13:18
Цитата Сообщение от Ilyamu Посмотреть сообщение
Проект компилируется нормально, но кнопка "Подключиться" неактивна - не неё нельзя нажать.
А вы к чему биндите кнопку? Нужно же не к методу, а команде:

C#
10
11
12
13
14
15
16
    partial class DBConnectViewModel : ViewModelBase
    {
        [RelayCommand]
        private void Conn()
        {
            Console.WriteLine("hello");
        }
XML
17
       <Button Command="{Binding ConnCommand}" HorizontalAlignment="Center">Подключиться</Button>
P.S. В зависимости от настроек CommunityToolkit, команда может быть невидна сразу. А появится только после сборки проекта.
Чтобы CommunityToolkit сразу после изменения генерил новый код, надо в параметрах поставить соответствующую галочку.
0
0 / 0 / 0
Регистрация: 18.07.2021
Сообщений: 12
05.11.2024, 14:42  [ТС]
Я так пробовал и где-то читал, что "Command" после названия метода ставится автоматически. В общем Command="{Binding ConnCommand}" не сработало. А что за параметры такие? Где взять?
Миниатюры
Не могу связать команду с методом при использовании CommunityToolkit.Mvvm Avalonia  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
05.11.2024, 15:15
Лучший ответ Сообщение было отмечено Ilyamu как решение

Решение

Цитата Сообщение от Ilyamu Посмотреть сообщение
Я так пробовал и где-то читал, что "Command" после названия метода ставится автоматически
Добавляет к имени команды CommunityToolkit при создании команды.
Но в Биндинг нужно это указывать.

Цитата Сообщение от Ilyamu Посмотреть сообщение
В общем Command="{Binding ConnCommand}" не сработало.
Вы точно Контекст Данных рантайм задаёте? А то в XAML у вас только для режима разработки.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:AvaloniaApplication1.ViewModels"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" Width="300" Height="250"
        x:Class="AvaloniaApplication1.Views.DBConnect"
        x:DataType="vm:DBConnectViewModel">
        
 
    <Design.DataContext>
        <!-- This only sets the DataContext for the previewer in an IDE,
             to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
        <vm:DBConnectViewModel/>
    </Design.DataContext>
 
    <Window.DataContext>
        <!-- Контекст данных времени исполнения. -->
        <vm:DBConnectViewModel/>
    </Window.DataContext>
Добавлено через 2 минуты
И проверьте биндиг для простого свойства:
C#
1
2
3
4
5
6
7
8
9
10
    partial class DBConnectViewModel : ViewModelBase
    {
 
        public string TextExample => "Проверка";
 
        [RelayCommand]
        private void Conn()
        {
            Console.WriteLine("hello");
        }
XML
16
17
18
19
20
    <StackPanel >
        <Button Command="{Binding ConnCommand}" HorizontalAlignment="Center">Подключиться</Button>
 
        <TextBlock Text="{Binding TextExample}"/>
    </StackPanel>
1
0 / 0 / 0
Регистрация: 18.07.2021
Сообщений: 12
05.11.2024, 15:15  [ТС]
Элд Хасп, может что-то с DataContext? Если делать всё то же самое с main окном, то кнопка активна...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
05.11.2024, 15:18
Цитата Сообщение от Ilyamu Посмотреть сообщение
Если делать всё тоже самое с main окном, то кнопка активна...
В Авалонии есть локатор, который автоматически подставляет нужный контекст данных определяя их по именам типов View и ViewModel.
Но я его не использую и не знаю насколько верно он работает во всех ситуациях.
0
0 / 0 / 0
Регистрация: 18.07.2021
Сообщений: 12
05.11.2024, 16:18  [ТС]
Элд Хасп, Дааа... Я не задавал рантайм контекст, не знал что так нужно. Для main окна он задаётся не в xaml, а в бехайнд коде, где-то в другом месте. После инициализации окна добавил DataContext = new DBConnectViewModel() и всё заработало. Спасибо!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
05.11.2024, 18:13
Цитата Сообщение от Ilyamu Посмотреть сообщение
Для main окна он задаётся не в xaml, а в бехайнд коде, где-то в другом месте.
Авалонии есть локатор. Я уже писал об этом выше. Этот локатор и задаёт контекст данных Окнам. Этот локатор надо как-то настраивать - он вроде по соглашению имён должен работаь.
Но я очень мало знаком с Аваланией, поэтому не могу точно сказать как заставить правильно работать этот локатор.
Особых сложностей быть не должно, но не вникал. Те проекты что я делал - все были однооконными.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
07.11.2024, 08:21
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Авалонии есть локатор.
Ilyamu, прочитайте: The View Locator | Avalonia
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2024, 08:21
Помогаю со студенческими работами здесь

Асинхронность в Avalonia (MVVM)
Avalonia — кроссплатформенная платформа пользовательского интерфейса на основе XAML, основанная на WPF/UWP и распространяемая под лицензией...

Отрисовка на Canvas при использовании MVVM
Проблема следующая: Есть список объектов, которые должны быть отражены в виде прямоугольников на холсте (Canvas). Места их отображения...

Хранение пароля при использовании MVVM
Здравствуйте. Написал форму на WPF. На ней есть IP адрес, логин и пароль для подключения к MSSQL, всё работает. Вот только я...

Viewmodel при использовании wpf и mvvm
Совсем недавно начал осваивать wpf и соответсвенно паттерн mvvm. Есть одно GUI (MainWindow). Оно должно пользоваться model через...

EventArgs при использовании ICommand для событий в MVVM
Пытаюсь, вроде как, делать программу по законам MVVM. И всё пока отлично, за исключением событий интерфейса, например, Drag'n'drop, или...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru