Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382

Работа с командами (биндинг команд)

19.10.2017, 15:52. Показов 1584. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
УЗдрасте!

У меня есть следующий флоу и при нём у меня немножко странное, как по мне, поведение проявляется.

ремарка: т.к. у меня был уже разговор с пиполом, который жаловался на архивы в топиках (мол страшно!) я сейчас всё на пальцах объясню. Флоу короткий.
  • И так, есть WPF приложение.
  • В DataContext главного окна бининдим ViewModel прям в конструкторе, до метода InitializeComponent
  • В ViewModel реализуем INPC
  • В ViewModel делаем свойство которое типа ICommand и которое дёргает, при обновлении, inpc event
  • Команда, в качестве параметра принимает сам DataContex, то есть, в нашем случае, записывается это CommandParameter="{Binding}" и в качестве аргумента, туда приходит ViewModel.
    И так, всё очевидно, но тут есть казус...
  • При вызове InitializeComponent из конструктора окна, в метод команды CanExecute в качестве параметра приходит null, ну а т.к. с null особо не поработаешь, вот такой проверкой parameter!=null возвращая false команда становится не активной и с ней уже, из интерфейса, не поработаешь, т.к. элемент управления блокируется.

Вопрос: какого фига приходит null?? Как перестроить инициализацию (или ещё что-то) что бы всё норм приходило?
p.s. если мы "костылём" обойдём этот первичный эффект то при клике на элемент управления всё норм приходит (проинициализированная моделька)
p.p.s. чего команды не статические, а в модельке - потому что мне нужно менять их, то есть, элемент управления, в разном состоянии будет иметь разные команды.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2017, 15:52
Ответы с готовыми решениями:

Можете посоветовать справочник команд с их машинными командами с наиболее полным описанием?
Не обязательно русский. Просто некоторые ньюансы на найденных мною русскоязычных сайтах умалчиваются. К примеру, что означает...

Работа со строковыми командами.
Помогите написать 2 программы на Ассемблере. 1) Написать программу обнуления массива слов длинной 100 элементов, использую все возможные...

Работа с командами cmd в java
Здравствуйте, вызываю с помощью приведенного ниже кода команду, все работает, но после выполнения команды окно cmd закрывается, собственно...

4
 Аватар для NotifyFuture
19 / 19 / 9
Регистрация: 09.09.2017
Сообщений: 60
20.10.2017, 10:19
Цитата Сообщение от DarkOrk Посмотреть сообщение
т.к. у меня был уже разговор с пиполом, который жаловался на архивы в топиках (мол страшно!) я сейчас всё на пальцах объясню.
Вы неверно поняли мысль - покажите минимальный код который воспроизводит проблему.
0
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
20.10.2017, 13:51  [ТС]
NotifyFuture,
ну просто потому что он разбросан по разным файлам\местам, я подумал, целесообразнее описать проблему, а думающий пипол повторить "по шагам" ~5 пунктов сможет...
Ну ок, сейчас что-то придумаю

Добавлено через 8 минут
Кнопка, на окне, с "общей командой" которая меняется в зависимости от состояния.
XML
1
<Button Content="{Binding TotalCommandName}" Command="{Binding TotalCommand}" CommandParameter="{Binding}"/>
В констрикторе модельки просо инициализация дефотными значениями
C#
1
2
TotalCommandName = "Включить все...";
TotalCommand = new StartAllCommand();
Сама команда
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class StartAllCommand : ICommand
        {
            public event EventHandler CanExecuteChanged;
 
            public bool CanExecute(object parameter)
            {
                return parameter != null; //вот тут проблема, при первом вызове метода, parameter будет равен null и контрол блокируется
            }
 
            public void Execute(object parameter)
            {
                throw new NotImplementedException();
            }
        }
Биндинг модельки к окну тоже банально в конструкторе
C#
1
2
3
4
5
6
public MainWindow()
        {
            DataContext = new MainViewModel();
 
            InitializeComponent();
        }
0
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
22.10.2017, 16:19  [ТС]
0
 Аватар для АлександрЮдаков
1 / 1 / 1
Регистрация: 22.10.2017
Сообщений: 1
22.10.2017, 20:42
Лучший ответ Сообщение было отмечено DarkOrk как решение

Решение

XML
1
<Button Content="{Binding TotalCommandName}" CommandParameter="{Binding}" Command="{Binding TotalCommand}" />
Местами надо поменять Command и CommandParameter.
Чтобы на момент присвоения Command у нас уже был заполнен CommandParameter.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2017, 20:42
Помогаю со студенческими работами здесь

Работа с 3G - модемом (опрос модема командами)
люди, подскажите. у меня затруднительная ситуация, спрашиваю модем (huawei e 171), а он мне на любые команды отвечает ^RSSI: 17, числа...

Работа с командами APDU. Получение данных со смарт карт
Здравствуйте, необходима информация по работе с APDU командами, а именно какие команды нужно посылать для получения информации. Информацию...

Альтернативная работа команд (test, xor, and)
Альтернативная работа команд (test, xor, and)?

Работа с com портом: посылка команд, информация.
помогите плиз разобраться с com портом. есть протокол обмена с внешним устройством,как настроить порт и как посылать по нём команды/запросы...

Работа с USB устройством (посылка и прием команд)
Хочу сделать устройство, которое будет общаться с компом через USB порт (на микроконтроллере AVR), работать оно будет при помощи библиотеки...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru