Как в C#(WPF) передать переменную при событии MouseDown?

105
14 июня 2019, 09:50

У меня есть WrapPanel, с помощью Children[0].MouseDown += *Событие* я хочу добавить событие в которое можно было бы передать переменную, в будущем я планирую там послать запрос на сервер и нужно чтобы была переменная с id (http://сайт/api/rooms/id ), но стандартная функция типа

private void Image_MouseDown(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show(e.Source.ToString());    
    }

не хочет принимать в аттрибуты int i и в MouseDown происходит ошибка.

В общем какое событие можно навесить на элемент чтобы можно было при нажатии отправить id?

Answer 1

Можно както при создании изборажения, в фигурные скобки определить событие нажатия и указать ему метод? stack.Children.Add(new Image {Height = 225, Width = 236, Source = logo, Stretch = Stretch.Fill,});

Можно:

Image image = new Image { Height = 225, Width = 236, Source = logo, Stretch = Stretch.Fill };
image.MouseDown += (s, e) => MyMethod(myId); // MyMethod — ваш метод для отправки, myId — ваш id или любой другой параметр
stack.Children.Add(image);

Хотя, если что-то должно вести себя как кнопка, то оно и должно быть кнопкой, WPF дает нам для этого все возможности: стилизуйте обычный Button — поместите ему изображение в Content или даже в шаблон.

Ну и, как вам подсказали в комментариях, желательно разделить логику и представление, использовать всю мощь автогенерации контролов с помощью ItemsPanel. Тогда ваш код превратится во что-то вроде такого:

<ItemsControl ItemsSource="{Binding MyItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding SendCommand}" CommandParameter="{Binding Id}"
                    Template="{StaticResource MySendButtonTemplate}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

И кучка небольших классов (настоящее ООП ;) ) VM, представляющих ваши объекты из предметной области вашей программы.

READ ALSO
Свой VideoPlayer с паттерном MVVM

Свой VideoPlayer с паттерном MVVM

Подскажите как сделать работу MediaElement с использованием паттерна MVVMЯ сделал дизайн VideoPlayer осталось только с помощью кнопок управлять воспроизведением...

111
Вывести содержимое List во view

Вывести содержимое List во view

Каким образом можно вывести выборку на основе модели данныхно с полями в ней не описанными? Например имеется контроллер:

104
Как открыть файл из ресурсов программы? [дубликат]

Как открыть файл из ресурсов программы? [дубликат]

На данный вопрос уже ответили:

119
Как правильно сравнить дату C#

Как правильно сравнить дату C#

Ребята подскажите как правильно сравнить дату? у меня есть запрос в бд, там отбирает строки и возвращает результат, как коллекцию обьекта...

108