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

Button Command в ListBox

20.05.2020, 03:34. Показов 3839. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2020, 03:34
Ответы с готовыми решениями:

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

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

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

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

3
Модератор
Эксперт .NET
15846 / 10994 / 2852
Регистрация: 21.04.2018
Сообщений: 32,252
Записей в блоге: 2
20.05.2020, 10:38 2
Лучший ответ Сообщение было отмечено 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
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
20.05.2020, 17:17  [ТС] 3
Сделал по вашему методу из темы, вроде как всё по феншую откопипастил и отредактировал, но не работает кнопка удаления. Подумал что дело в 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
15846 / 10994 / 2852
Регистрация: 21.04.2018
Сообщений: 32,252
Записей в блоге: 2
20.05.2020, 21:23 4
Цитата Сообщение от 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
20.05.2020, 21:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2020, 21:23
Помогаю со студенческими работами здесь

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

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

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

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

Изменение listbox в зависимости от нажатой Button
Ребят, есть код, тут я привел пример всего 3 значений combobox, для каждого по 3 значения...

Вывод изображения при контакте listbox + button
Добрый день.Недавно начал потихоньку изучать С# и создавать свою программку.Вскоре мне...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru