Одним из решений является использование перенаправленной команды WPF.
Примечание. Я написал этот ответ с предположением, что ваше "Представление" является подклассом класса Window.
Сначала добавьте настраиваемую маршрутизируемую команду в ваш проект.
public static class MyCommands
{
private static readonly RoutedUICommand exportCommand = new RoutedUICommand("description", "Export", typeof(MyCommands));
public static RoutedUICommand ExportCommand
{
get
{
return exportCommand;
}
}
}
В каждом представлении установите настраиваемую команду для Button.Command и привяжите целевой объект к Button.CommandTarget.
<Button Command="local:MyCommands.ExportCommand" CommandTarget="{Binding ElementName=dataGrid1}">Export</Button>
Фирменно, в вашем классе Application (по умолчанию называемом App) зарегистрируйте привязку команды между вашей пользовательской командой и Window.
public partial class App : Application
{
public App()
{
var binding = new CommandBinding(MyCommands.ExportCommand, Export, CanExport);
CommandManager.RegisterClassCommandBinding(typeof(Window), binding);
}
private void Export(object sender, ExecutedRoutedEventArgs e)
{
// e.Source refers to the object is bound to Button.CommandTarget.
var dataGrid = (DataGrid)e.Source;
// Export data.
}
private void CanExport(object sender, CanExecuteRoutedEventArgs e)
{
// Assign true to e.CanExecute if your application can export data.
e.CanExecute = true;
}
}
Теперь App.Export вызывается, когда пользователь нажимает кнопку.
Образец доступен здесь .