Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89

Как привязать метод к кнопке из ContextMenu

17.08.2023, 12:05. Показов 1349. Ответов 22
Метки c#, wpf (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна Ваша помощь! Никак не могу понять, почему кнопка "Edit" из ContextMenu не вызывает метод "EditProduct". Вроде привязку везде сделал, но все равно не работает. Кто может подсказать? (используется паттерн MVVM)

XML
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<Page x:Class="BuildStore.Pages.PageProduct"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:BuildStore.Pages"
      xmlns:Icon="http://metro.mahapps.com/winfx/xaml/iconpacks"
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      xmlns:localAdapter="clr-namespace:BuildStore.Adapters"
      Title="PageProduct">
 
    <Page.DataContext>
        <localAdapter:AdapterProduct/>
    </Page.DataContext>
    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
 
        <ScrollViewer x:Name="ScrollViewProduct" Grid.Row="2">
            <StackPanel>
                <TextBlock Text="10 товаров" Margin="10" FontSize="22"/>
                <StackPanel Margin="20 0">
                    <ItemsControl x:Name="listViewProducts" ItemsSource="{Binding Product}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Border Margin="10" Width="150" Height="220" CornerRadius="10" Background="#FFDEAC">
                                    <StackPanel>
                                        <Border Width="100" Height="100" Margin="0,5,0,0">
                                            <Border.Background>
                                                <ImageBrush ImageSource="/Images/image.png"/>
                                            </Border.Background>
                                        </Border>
                                        <TextBlock Text="{Binding Title}" TextWrapping="Wrap" FontSize="20" HorizontalAlignment="Center" FontWeight="Medium"/>
                                        <TextBlock Text="{Binding GetDiscount}" TextWrapping="Wrap" FontSize="15" HorizontalAlignment="Left" Margin="5,0,0,0"/>
                                        <TextBlock Text="{Binding GetCount}" FontSize="15" HorizontalAlignment="Left" Margin="5,0,0,0"/>
                                        <TextBlock Text="{Binding GetCost}" FontWeight="Medium" FontSize="18" HorizontalAlignment="Center" Margin="5,2,0,0"/>
                                    </StackPanel>
 
                                    <Border.ContextMenu>
                                        <ContextMenu>
                                            <MenuItem Header="Edit" Command="{Binding Path=DataContext.ItemsControl, 
                                                ElementName=listViewProducts}" CommandParameter="{Binding}"/> <!-- Проблемное место-->
                                            <MenuItem Header="Delete" />
                                        </ContextMenu>
                                    </Border.ContextMenu>
                                </Border>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <WrapPanel/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>
                </StackPanel>
            </StackPanel>
        </ScrollViewer>
 
    </Grid>
</Page>

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    public class AdapterProduct : INotifyPropertyChanged
    {
        private ObservableCollection<ModelProduct> product;
 
        public ObservableCollection<ModelProduct> Product
        {
            get { return product; }
            set
            {
                product = value;
                OnPropertyChanged();
            }
        }
        public ICommand EditCommand { get; }
 
        public AdapterProduct()
        {
            Product = new ObservableCollection<ModelProduct>();
            Product.Add(new ModelProduct("1", "Product 1", "", "1200", "", "Category", "нет скидки", "5", "30"));
            Product.Add(new ModelProduct("2", "Product 2", "", "124.03", "", "Category", "нет скидки", "5", "36"));
            Product.Add(new ModelProduct("3", "Product 3", "", "3463.33", "", "Category", "нет скидки", "5", "77"));
            Product.Add(new ModelProduct("4", "Product 4", "", "643.23", "", "Category", "нет скидки", "5", "55"));
            Product.Add(new ModelProduct("5", "Product 5", "", "834.23", "", "Category", "нет скидки", "5", "46"));
            Product.Add(new ModelProduct("6", "Product 6", "", "834.24", "", "Category", "нет скидки", "5", "75"));
            Product.Add(new ModelProduct("7", "Product 7", "", "753.23", "", "Category", "Летняя скидка", "5", "45"));
            Product.Add(new ModelProduct("8", "Product 8", "", "653.45", "", "Category", "нет скидки", "5", "65"));
            Product.Add(new ModelProduct("9", "Product 9", "", "5222.53", "", "Category", "Черная пятница", "5", "43"));
            Product.Add(new ModelProduct("10", "Product 10", "", "8654.22", "", "Category", "нет скидки", "5", "74"));
            EditCommand = new RelayCommand<ModelProduct>(EditProduct);
        }
 
        private void EditProduct(ModelProduct _product)
        {
            MessageBox.Show($"Редактирование: {_product.Title}");
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2023, 12:05
Ответы с готовыми решениями:

Как привязать переменную к кнопке?
Допустим у меня есть 5 кнопок. Нажав на первую, я должен вывести одно рандомное число. Нажав вторую - два числа , третью - три и т.д. Как...

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

Как привязать действие к кнопке?
есть страничка &lt;head&gt; &lt;style&gt; #parent_popup { background: #000; height: 100%; opacity: 0.9; position: fixed; ...

22
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
17.08.2023, 15:55  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо большое! Значит надо было присвоить тэг к Border
0
 Аватар для Midian
610 / 392 / 198
Регистрация: 31.03.2013
Сообщений: 2,702
17.08.2023, 15:58
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Спасибо большое! Значит надо было присвоить тэг к Border
Да, и тогда бы все заработало
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
17.08.2023, 21:18
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Кто может подсказать? (используется паттерн MVVM)
В таких сценариях (привязка команды к логическом предку) рекомендуется использовать RoutedCommand.
Примеры:
Не работает TemplateSelector
Приложение MVVM. Контекстное меню (удаление, редактирование) для элемента (Товара) в ListBox
Реализация переходов между страницами
OPenPage недоступен из-за его уровня защиты
Как сделать так, чтобы Rectangle при растягивании окна тянулся только вправо, но не вниз ?
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2023, 21:18

Как привязать таймер к кнопке
Как реализовать привязку начала отсчета времени по нажатию на кнопку? Есть страница с кнопкой получения бонуса, после нажатия которая...

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

Как к кнопке привязать запуск файла?
Здравствуйте. Хотелось бы знать, как привязать к кнопке исполнение файла .ехе?

Как привязать музыку из ресурса к кнопке?
Как привязать музыку из заранее созданного и запакованного ресурса к кнопке?

Как привязать дополнительную ссылку к кнопке Submit
Есть форма php два поля editbox и кнопка Submit соответственно, ведется запись в файл, задача заключается в следуюещем: как привязать...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru