Нужна помощь в обработке событий DataTemplate в файле Application.xaml.

В моем приложении есть шаблон данных с несколькими кнопками. Я хочу, чтобы даже обработчик этих кнопок запускался на текущей странице (я использую этот шаблон на многих страницах), а не в файле Application.xaml.vb/cs, поскольку мне нужны разные действия на каждой странице.

Я надеюсь, что я ясно.


person Shimmy Weitzhandler    schedule 30.03.2009    source источник


Ответы (2)


Для этого можно использовать команды. Пусть Buttons в DataTemplate выполняют определенные Commands:

<Button Command="{x:Static MyCommands.SomeCommand}"/>

Затем пусть каждое представление, использующее этот DataTemplate, обрабатывает Command:

<UserControl>
    <UserCommand.CommandBindings>
         <CommandBinding Command="{x:Static MyCommands.SomeCommand}"
                         Executed="_someHandler"/>
    </UserCommand.CommandBindings>
</UserControl>

ИЗМЕНИТЬ после комментариев: после того, как вы создали код программной части для своего ResourceDictionary в соответствии с эти инструкции, вы можете просто подключать события обычным способом:

In MyResources.xaml:

<ListBox x:Key="myListBoxResource" ItemSelected="_listBox_ItemSelected"/>

Затем в MyResources.xaml.cs:

private void _listBox_ItemSelected(object sender, EventArgs e)
{
    ...
}
person Kent Boogaart    schedule 30.03.2009
comment
Тогда как бы вы установили некоторые события в коде позади? А что, если я использую ResourceDictionary (у которого нет кода позади файла) и хочу сослаться на обработчик на самой странице ResourceDictionary. - person Shimmy Weitzhandler; 30.03.2009
comment
Вы можете легко получить файл кода программной части для ResourceDictionary. См. stackoverflow.com/questions/92100/ - person Kent Boogaart; 30.03.2009
comment
1) отредактируйте второй фрагмент, касающийся того, как адресовать событие локальному обработчику. 2) что такое MyCommands, декларация? - person Shimmy Weitzhandler; 30.03.2009
comment
1) Хорошо, отредактировал. 2) Вам нужно будет прочитать, в частности, о командных и маршрутизируемых командах. - person Kent Boogaart; 30.03.2009
comment
Я не хочу запускать событие ItemSelected, я хочу запускать событие в кнопке DataTemplate, так как у меня есть много кнопок в шаблоне (например, удаление, редактирование, перемещение вверх, перемещение вниз и многое другое). кнопки). Благодарю. - person Shimmy Weitzhandler; 30.03.2009

Если вы используете события, а не команды, то в вашем обработчике событий Click просто напишите

private void Button_Click(object sender, RoutedEventArgs e)
{
    var dataItem = (FrameworkElement)sender).DataContext;
    // process dataItem
}
person xmedeko    schedule 09.06.2015