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

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

06.10.2018, 23:27. Показов 5363. Ответов 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
 Аватар для Элд Хасп
16154 / 11275 / 2890
Регистрация: 21.04.2018
Сообщений: 33,153
Записей в блоге: 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
 Аватар для Элд Хасп
16154 / 11275 / 2890
Регистрация: 21.04.2018
Сообщений: 33,153
Записей в блоге: 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
 Аватар для Элд Хасп
16154 / 11275 / 2890
Регистрация: 21.04.2018
Сообщений: 33,153
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru