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

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

05.11.2024, 12:41. Показов 1945. Ответов 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
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 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
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 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
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 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
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
05.11.2024, 18:13
Цитата Сообщение от Ilyamu Посмотреть сообщение
Для main окна он задаётся не в xaml, а в бехайнд коде, где-то в другом месте.
Авалонии есть локатор. Я уже писал об этом выше. Этот локатор и задаёт контекст данных Окнам. Этот локатор надо как-то настраивать - он вроде по соглашению имён должен работаь.
Но я очень мало знаком с Аваланией, поэтому не могу точно сказать как заставить правильно работать этот локатор.
Особых сложностей быть не должно, но не вникал. Те проекты что я делал - все были однооконными.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru