Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
4 / 2 / 2
Регистрация: 15.07.2011
Сообщений: 21

Как правильно подхватить команду в XAML?

20.09.2018, 18:11. Показов 778. Ответов 5
Метки wpf, xaml (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток))
Есть проект в поректе основное окно в котором компонуются пользовательские контролы.
У пользовательских контролов есть кнопки, причем функционал во многих случаях одинаковый.
решил прописать функционал в одном месте и потом подхватыватьего из нужного контрола непосредственно в XAML.
Все выглядело нормально, но неожиданно столкнулся с проблеммой:

Fehler: Executed="commands:ReprogrammerCommandIm plementation.Connection" ist ungültig. "commands:ReprogrammerCommandImplementat ion.Connection" ist kein gültiger Methodenname für den Ereignishandler. Gültig sind nur Instanzmethoden für die generierte Klasse bzw. für die Code-Behind-Klasse.

на всякий случай перевод))) :
Ошибка: Executed="commands:ReprogrammerCommandIm plementation.Connection" не действителен. "commands:ReprogrammerCommandImplementat ion.Connection" не действительное имя метода для обработчика событий. Действительны только методы для сгенерированного класса или для Code-Behind-Klasse.

сдесь создаю команды:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace IKS9ReprogrammerWPF
{
 
 
    public class ReprogrammerCommandsDevelopment
    {
        static ReprogrammerCommandsDevelopment()
        {
            Connect = new RoutedCommand("Connect", typeof(Pages.DevelopmentModePage));
            Disconnect = new RoutedCommand("Disconnect", typeof(Pages.DevelopmentModePage));
            Read = new RoutedCommand("Read", typeof(Pages.DevelopmentModePage));
            Check = new RoutedCommand("Check", typeof(Pages.DevelopmentModePage));
            Write = new RoutedCommand("Write", typeof(Pages.DevelopmentModePage));
        }
 
        public static RoutedCommand Connect { get; set; }
        public static RoutedCommand Disconnect { get; set; }
        public static RoutedCommand Read { get; set; }
        public static RoutedCommand Check { get; set; }
        public static RoutedCommand Write { get; set; }
    }
    public class ReprogrammerCommandImplementation
    {
        public bool Connection(object sender, ExecutedRoutedEventArgs e)
        {
            bool result = false;
            MessageBox.Show("Command aus " + sender.ToString() + " ausgeführt");
            return result;
        }
    }
}
сдесь пытаюсь их подтянуть на контрол:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<Page x:Class="IKS9ReprogrammerWPF.Pages.DevelopmentModePage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:IKS9ReprogrammerWPF.Pages"
      xmlns:commands="clr-namespace:IKS9ReprogrammerWPF"
      mc:Ignorable="d" 
      d:DesignHeight="400" d:DesignWidth="400"
      Title="DevelopmentModePage" Height="Auto" Width="Auto" MaxHeight="{Binding Source=IWindowHiegth, Mode=Default}" MaxWidth="{Binding Path=IWindowWidth}">
 
    <Page.CommandBindings>
        <CommandBinding Command="commands:ReprogrammerCommandsDevelopment.Connect" Executed="commands:ReprogrammerCommandImplementation.Connection"/>
    </Page.CommandBindings>
    <Grid>
        <Button Style="{DynamicResource BaseButton}" Grid.Column="0" Grid.Row="6" Content="Eingabe prüfen" Command="commands:ReprogrammerCommandsDevelopment.Connect" />
    </Grid>
</Page>
Лишние строки из XAML убрал, чтоб не заграмождать код))

Так вот, в чем собственно вопрос, такая реализация в принципе возможна или я пытаюсь реализовать не реализуемое и имплементация логики команды должна быть в Code-Behind?)))
Если возможно, подскажите где я накасячил, в новичек, так что буду рад любым советам и критике)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2018, 18:11
Ответы с готовыми решениями:

Как подхватить событие network cable unplugged
Я нашел возможность выяснить текущий статус соединения для 2000/XP. Хотя и не пробовал его на работоспособность. using System.Management;...

Xaml не правильно отображает шрифты
Шрифт получается очень жирным, с другой стороны если кликнуть по нему два раза для редактирования текста, в это время он отображается...

Передача обьекта xaml в другой обьект xaml
есть главное окно xaml &lt;Window x:Class=&quot;test.MainWindow&quot; ...

5
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
21.09.2018, 08:02
Цитата Сообщение от Bars911 Посмотреть сообщение
Так вот, в чем собственно вопрос, такая реализация в принципе возможна или я пытаюсь реализовать не реализуемое и имплементация логики команды должна быть в Code-Behind?)))
При использовании MVVM, логика команды должна быть во ViewModel.
1
21.09.2018, 08:29

Не по теме:

Цитата Сообщение от kenny69 Посмотреть сообщение
При использовании MVVM, логика команды должна быть во ViewModel
Я использую команды в VM и дергаю процедуры из M

0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
21.09.2018, 08:38
Я просто не вижу установки DataContext для View.
Во ViewModel уже описывается команда и ее обработчик и не надо для этого делать отдельные классы.
И вот это тоже лишнее, на мой взгляд:
Цитата Сообщение от Bars911 Посмотреть сообщение
<Page.CommandBindings>
* * * * <CommandBinding Command="commands:ReprogrammerCommandsDe velopment.Connect" Executed="commands:ReprogrammerCommandIm plementation.Connection"/>
* * </Page.CommandBindings>
Гляньте
https://metanit.com/sharp/wpf/22.3.php
1
4 / 2 / 2
Регистрация: 15.07.2011
Сообщений: 21
21.09.2018, 15:26  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
Во ViewModel уже описывается команда и ее обработчик и не надо для этого делать отдельные классы.
У меня в ViewModel основного окна компануются контролы(Image с логотипом, Frame для показа Page с элементами управления, ListView который компануется из прочитанных из DataModel, ProgressBar и т.д.) в зависимости от а режима подтягивается Page с соответствующим функционалом. Часть кнопок в обоих режимах выполняет один и тотже функционал, поэтому хотелось для удобства последующего сопровождения и поддержки проекта выделить команды в отделный класс, возможно словарь ресурсов, чтобы если чтото поменять надо будет не искать среди ViewModels а исправить в одном месте и все))) Ну и вообще, всегда стараюсь писать модульный код, чтобы можно было править отдельные модули не нарушая стабильности проекта. спасибо за ссылку, пара интересных моментов там есть, но не совсем то что я пытаюсь реализовать.

Добавлено через 12 минут
Цитата Сообщение от kenny69 Посмотреть сообщение
Я просто не вижу установки DataContext для View
вот Code-Behind к Xaml:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using IKS9ReprogrammerWPF.Model;
using System.Windows.Controls;
using IKS9ReprogrammerWPF.ViewModels;
 
namespace IKS9ReprogrammerWPF.Pages
{
    /// <summary>
    /// Interaktionslogik für DevelopmentModePage.xaml
    /// </summary>
    public partial class DevelopmentModePage : Page
    {
        DevelopmentModePage(DataModel model)
        {
            InitializeComponent();
            //establishes data source for XAML-File 
            DevelopmentModePageViewModel vm = new DevelopmentModePageViewModel(model);
            DataContext = vm;
        }
    }
}
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
21.09.2018, 17:28
Цитата Сообщение от Bars911 Посмотреть сообщение
Часть кнопок в обоих режимах выполняет один и тотже функционал, поэтому хотелось для удобства последующего сопровождения и поддержки проекта выделить команды в отделный класс
Я думаю, что лучше вынести не сами команды в отдельный класс, а только их содержимое. Я обычно выношу в сервисный слой. Получается, что команды уже обращаются к какому-то сервису и выполняют его функцию. Сервис - по сути обычный класс с каким-то набором функционала. Также не забываем про IoC при работе.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2018, 17:28
Помогаю со студенческими работами здесь

Как правильно выполнить команду print
я только начинаю изучать язык и вообще программирование... и у меня проблема с вызовом команды PRINT , он мне все время пишет, что...

Как правильно использовать команду mail
Мне надо отправить сообщение другому пользователю, чтобы в папке /var/spool/mail/ появился файлик с именем пользователя. Т.е. user1...

Как правильно выполнить команду копировать?
Подскажите, как правильно выполнить команду копировать для любого пользователя и с определённым форматом файла? ...

Как правильно использовать команду system?
Добрый день.Надо в коде прописать выполнение команд командной строки. Берем команду system.Она работает. Но не понятно. 1)В...

Как подхватить переменные из браузера
добрый день уважаемые форумчане хотел спросить а как передать значения переменной со тсранице в браузере в php в программу с++ qt? те у...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru