Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2892
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2

Команды в WPF (ListBoxItem.Selected)

06.10.2018, 23:27. Показов 5439. Ответов 26

Студворк — интернет-сервис помощи студентам
Изучаю WPF недавно. Дошёл до до WPF команд. Читаю-читаю и что по мере чтения в голове только каша увеличивается.
Помогите, на примере понять как создать команду, как её пользоваться.
Есть простой ListBox в котором Content выделенного элемента сохраняется в свойстве вспомогательного класса.
И TextBlock который отображает это сохранённое значение.
На примере показываю как это я могу реализовать с помощью кода и событий.
Вспомогательный класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public class AuxiliaryClass : INotifyPropertyChanged
    {
        #region Событие PropertyChanged и метод для его вызова
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
            => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        #endregion
 
 
        public List<string> ListItem { get; } = new List<string>(@"
Строка 1
Строка 2
Строка 3
Строка 4
Строка 5"
        .Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
 
        private string _selectedStrin;
        public string SelectedString
        { get => _selectedStrin;
            set { _selectedStrin = value; OnPropertyChanged("SelectedString"); } }
    }
XAML окна
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <Window.DataContext>
        <local:AuxiliaryClass/>
    </Window.DataContext>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
 
        <ListBox x:Name="myLB" Margin="10" ItemsSource="{Binding ListItem}">
            <ListBox.Resources>
                <Style TargetType="ListBoxItem">
                    <EventSetter Event="ListBoxItem.Selected" Handler="ListBoxItem_Selected"></EventSetter>
                </Style>
            </ListBox.Resources>
        </ListBox>
        <TextBlock Text="{Binding SelectedString}" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" Margin="10" Grid.Row="1"/>
    </Grid>
Обработчик в коде окна
C#
1
2
3
4
        private void ListBoxItem_Selected(object sender, RoutedEventArgs e)
        {
           ((AuxiliaryClass) DataContext).SelectedString = ((ListBoxItem)sender).Content.ToString();
        }
Как создать и подключить команду для тех же самых действий?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2018, 23:27
Ответы с готовыми решениями:

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

[WPF] Использование UserControl в обертке ListBoxItem
Доброго времени суток! подскажите пожалуйста, ради эксперимента в качестве Item ListBox использую вместо шаблона UserControl который связан...

WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Для использования и создания WPF команд в Net предусмотрен...

26
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2892
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
08.10.2018, 16:38  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Рядовой Посмотреть сообщение
Хотя даже в интернете мало информации по интерактивным триггерам.
Не только по этому вопросу. Когда пытаешься чуть удалиться от азов - информации с гулькин нос. Но может я не так или не там ищу....?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
08.10.2018, 16:44
Элд Хасп, еще надо отметить, что все события контролов - это часть view. т.е. в codebehind вполне можно обработать события контролов, если это не относится к логике приложения.

Добавлено через 2 минуты
В рунете такого точно мизер. На буржуйском stackoverflow - и то обычно не больше 2-3 тем с ПОДОБНЫМ вопросом. И не все с ответами..
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2892
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
08.10.2018, 16:51  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
еще надо отметить, что все события контролов - это часть view. т.е. в codebehind вполне можно обработать события контролов, если это не относится к логике приложения.
А связь между View и ViewModel на обработчики событий корректно возлагать? Или обработчики должны работать только внутри View?

Цитата Сообщение от Рядовой Посмотреть сообщение
На буржуйском stackoverflow - и то обычно не больше 2-3 тем с ПОДОБНЫМ вопросом. И не все с ответами..
Перерыл я его. Там или действительно без ответов. Или объясняется так, что толком всё равно не понятно. Укажут на какой-то непонятный способ и говорят о нём как о само собой понятном, общепринятом.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
08.10.2018, 16:59
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А связь между View и ViewModel на обработчики событий корректно возлагать?
конечно, вьюшка знает только вьюмодель. А вьюмодель только модель.

Добавлено через 2 минуты
Вот обрабатывать события контролов во вьюмодели нельзя. Данные из codebehind через привязки можно отправлять
во вьюмодель.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
08.10.2018, 17:01
Элд Хасп, вот на этом сайте много инфы по WPF - https://www.codeproject.com/
1
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
09.10.2018, 20:28
Важно уяснить, что команда - это паттерн, не ограниченный только WPF. Подробней о нём Вы можете прочесть здесь. Суть данного паттерна сводится к выполнению действий абстрактно от вызывающей стороны.

Если у Вас есть желание посмотреть как это всё выглядит на практике, можете обратиться к одному из моих проектов, расположенному на GitHub'е. В каталоге ToDoCost располагается файл разметки MainWindow.xaml, в котором на кнопки навешаны команды. В каталоге ViewModel располагается каталог с командами - ItemsCommands. А инициализация команд происходив во ViewModel - ViewModel/ItemsViewModels/ItemsViewModel (ICommandAggregator - это базовый интерфейс реализующий ICommand и ряд других интерфейсов). В проекте явно видно преимущество команд - UWP и WPF приложения обращаются к одним и тем же командам без изменения кода под каждую платформу.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2892
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
09.10.2018, 20:55  [ТС]
Цитата Сообщение от Bespridelschic Посмотреть сообщение
Если у Вас есть желание посмотреть как это всё выглядит на практике
Спасибо! Обязательно посмотрю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2018, 20:55

WPF.MVVM и команды
Доброго дня. При изучении команд в MVVM столкнулся с проблемой включения и отключения. есть свойство и две команды public class...

Изменение горячих клавиш команды WPF
Есть простое тестовое приложение WPF - один пункт меню, одна кнопка, одна надпись (Label), и одна команда с обработчиком из стандартного...

Привязка команды к кнопке внутри ListBox WPF
Есть разметка Xaml: &lt;Window x:Class=&quot;WpfApp1.MainWindow&quot; ...

Как разбить WPF, MVVM по проектах? Пример команды
добрый день, я делаю большой проект на WPF с использованием паттерна MVVM. как мне его правильно разбить по проектам в VisualStudio? я так...

Как отменить Checked \ Selected CheckBox из самого события на Selected в Listener
В самом событии - Листенере надо отменить установку галки. Чтобы не зациклилось надо установить без вызова опять этого листенера. Как? ...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru