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

Button Command в ListBox

20.05.2020, 03:34. Показов 3973. Ответов 3
Метки mvvm (Все метки)

Author24 — интернет-сервис помощи студентам
Выбрал в ComboBox'е нужный пункт и добавил его в ListBox
Название: Screenshot_2.png
Просмотров: 115

Размер: 2.6 Кб
Прописал кнопке в виде крестика Command
XML Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
<ListBox ItemsSource="{Binding PullOfSelectedBanks}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
 
 
                <Button Command="{Binding DeleteCommand, Mode=OneWay}"/>
 
 
            </Grid>
        <DataTemplate>
    <ListBox.ItemTemplate>
</ListBox>
C# Скопировано
1
2
3
4
5
6
7
8
9
10
public ObservableCollection<SalesBankV> PullOfSelectedBanks { get; } = new ObservableCollection<SalesBankV>();
private RelayCommand _deleteCommand;
public RelayCommand DeleteCommand => _deleteCommand
            ?? (_deleteCommand = new RelayCommand(DeleteCommandMethod));
private void DeleteCommandMethod(object parameter)
{
    Log += "\n" + PullOfSelectedBanks.Count + "f" + "\n" ;
    //PullOfSelectedBanks.Remove(PullOfSelectedBanks.Where(i => i.ID == SBank.ID).Single());
     Log += "\n" + PullOfSelectedBanks.Count + "\n";
}
но при нажатии у меня даже в лог ничего не выводит, если вырезать кнопку из ListBox'а и вставить в любое другое место -- работает, в ListBox'е -- нет.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2020, 03:34
Ответы с готовыми решениями:

Button Command Binding
Есть кнопка, хочу чтобы при нажатии срабатывала функция и выходило из текущей формы. &lt;Button Content=&quot;Add&quot;...

Обратиться к button которая входит в listBox
Добрый день! Хочу изменить Image которая находится в Button, которая является элементом listbox. Код страницы вообще не видит image. Как...

[WPF] Поиск по ListBox, с использованием TextBox и Button
Здравствуйте. Помогите с реализацией: Есть ListBox, Button и TextBox. в поле поиска пишу к примеру: Intel, и нажать поиск. Пройдясь по...

3
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15955 / 11091 / 2864
Регистрация: 21.04.2018
Сообщений: 32,569
Записей в блоге: 2
20.05.2020, 10:38
Лучший ответ Сообщение было отмечено limeniye как решение

Решение

Цитата Сообщение от limeniye Посмотреть сообщение
но при нажатии у меня даже в лог ничего не выводит, если вырезать кнопку из ListBox'а и вставить в любое другое место -- работает, в ListBox'е -- нет.
ListBox - это списочный элемент и в Контекст Данных шаблоне элемента списка передаётся элемент списка, а не VM.
А команда у вас объявлена на уровне VM, вне видимости шаблона элемента (и, соответственно, кнопки).

Есть несколько вариантов решения.
Один из них WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]

Ещё вариант привязка типа ElementName.
XML Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
<ListBox x:Name="listBox" ItemsSource="{Binding PullOfSelectedBanks}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
 
 
                <Button Command="{Binding DataContext.DeleteCommand, Mode=OneWay, ElementName=listBox}"/>
 
 
            </Grid>
        <DataTemplate>
    <ListBox.ItemTemplate>
</ListBox>
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.05.2020, 17:17  [ТС]
Сделал по вашему методу из темы, вроде как всё по феншую откопипастил и отредактировал, но не работает кнопка удаления. Подумал что дело в Command="{Binding RemoveCommand}". Добавил и всё равно не работает.

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
public class SalesBankV:OnPropertyChangedClass
    {
        private string _id, _name;
        public string ID { get => _id; set => SetProperty(ref _id, value); }
        public string Name { get => _name; set => SetProperty(ref _name, value); }
       
    }
 
{
        private ObservableCollection<SalesBankV> PullOfSelectedBanks = new ObservableCollection<SalesBankV>();
        private RelayCommand _removeCommand;
        public ObservableCollection<SalesBankV> Items { get => PullOfSelectedBanks; set { PullOfSelectedBanks = value; OnPropertyChanged(); } }
 
        public RelayCommand RemoveCommand => _removeCommand
            ?? (_removeCommand = new RelayCommand(RemoveMetod, RemoveCanMetod));
        private bool RemoveCanMetod(object parameter)
        {
            if (parameter is SalesBankV item)
                return Items.IndexOf(item) >= 0;
            else
                return false;
        }
        private void RemoveMetod(object parameter)
        {
            Log += "\n"  + "f" + "\n" ;
            if (parameter is SalesBankV item)
                Items.Remove(item);
        }
}
XML Скопировано
1
2
3
4
5
6
7
8
9
<ListBox ItemsSource="{Binding Items}" HorizontalAlignment="Center" Background="{x:Null}" Width="Auto" Height="Auto"  >
        <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:SalesBankV}">
                        <Grid>
                                <Button  CommandParameter="{Binding}"/>
                        </Grid>
                </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>
Добавляю элементы вот так вот:
C# Скопировано
1
2
3
4
5
6
7
8
private void AddCommandMethod(object parameter)
{
        PullOfSelectedBanks.Add(new SalesBankV
        {
                ID = SBank.ID,
                Name = SBank.Name
        });
}
SBank -- выбранный элемент в комбо боксе.

Button Command в ListBox
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15955 / 11091 / 2864
Регистрация: 21.04.2018
Сообщений: 32,569
Записей в блоге: 2
20.05.2020, 21:23
Цитата Сообщение от limeniye Посмотреть сообщение
не работает кнопка удаления
Пишу здесь - может мелкая ошибка будет.
Проверьте сами.
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
{
       // private ObservableCollection<SalesBankV> PullOfSelectedBanks = new ObservableCollection<SalesBankV>();
        private RelayCommand _removeCommand;
 
        // Свойство типа ObservableCollection должно быть ТОЛЬКО ДЛЯ ЧТЕНИЯ
        public ObservableCollection<SalesBankV> Items {get;} = new ObservableCollection<SalesBankV>();
         // { get => PullOfSelectedBanks; set { PullOfSelectedBanks = value; OnPropertyChanged(); } }
 
        public RelayCommand RemoveCommand => _removeCommand
            ?? (_removeCommand = new RelayCommand(RemoveMetod, RemoveCanMetod));
        private bool RemoveCanMetod(object parameter)
        {
           // if (parameter is SalesBankV item)
           //     return Items.IndexOf(item) >= 0;
           // else
           //     return false;
 
             return parameter is SalesBankV item && Items.Contains(item);
        }
        private void RemoveMetod(object parameter)
        {
            Log += "\n"  + "f" + "\n" ;
          //  if (parameter is SalesBankV item)
                Items.Remove((SalesBankV) parameter);
        }
}
И надо же задать привязку не только параметру, но и команде!
XML Скопировано
1
2
3
4
5
6
7
8
9
10
11
<ListBox x:Name="listBox" ItemsSource="{Binding Items}" 
        HorizontalAlignment="Center" Background="{x:Null}" Width="Auto" Height="Auto"  >
        <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:SalesBankV}">
                        <Grid>
                                <Button  CommandParameter="{Binding}"
                                         Command="{Binding DataContext.RemoveCommand, ElementName=listBox}"/>
                        </Grid>
                </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2020, 21:23
Помогаю со студенческими работами здесь

Button Command?
Честное слово, если бы время не поджимало, ещё бы поковырялся сам, но, увы, так что... вопрос. У меня на форме задаётся определённое...

Button и ListBox
Программа выдает &quot;Для нестатического поля, метода или свойства &quot;Person.FirstName&quot; требуется ссылка на объект&quot;. То же самое по...

Listbox, textbox, button и timer
Из 1-го textbox по нажатию кнопки в listbox выводятся ноты: дорефасольми(выводится вся эта строчка) , при нажатии на вторую кнопку строчка...

Запись в listbox без button
Здравствуйте! есть код, в textbox пишу текст и он автоматически должен повторяться в listbox. Запись происходит, но с задержкой в один...

Обработчик клика Button к ListBox
Как на примере кода ниже в обработчике клика кнопки button_find_Click взять выделенную строку ListBox.SelectedItem и после вытягивания...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер