Я немного запутался в командах WPF с разными типами целей.
Так что, если я определю команду
<Window.CommandBindings>
<CommandBinding Command="Copy"
Executed="CopyCmdExecuted"
CanExecute="CopyCmdCanExecute"/>
</Window.CommandBindings>
А теперь я использую его в контекстном меню:
<ContextMenu Name="FolderContextMenu">
<MenuItem Command="Copy"/>
</ContextMenu>
И у меня есть метод для обработки команды:
private void CopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
}
И я использую его в простом старом меню:
<Menu Name="editMenu">
<MenuItem Command="Copy"/>
</Menu>
У меня нет проблем с пониманием этого. Но я немного запутался в том, что я должен делать, если целевые объекты бывают разных типов.
Допустим, у меня есть папки и пользователи, у каждого из которых есть контекстное меню с командой New (и меню редактирования строки меню, которое также имеет команду New).
Когда выполняется New, независимо от того, является ли она Папкой или Пользователем, выполняется CopyCmdExecuted. Итак, теперь я должен демультиплексировать на цели? Что-то вроде
private void CopyCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
if(sender is User)
// Do copy user stuff
if(sender is Folder)
// Do copy folder stuff
}
Если я получаю много типов данных, которые хочу скопировать, это немного раздражает. Я что-то здесь не понимаю?
(Очевидно, я мог бы просто сделать так, чтобы папка и пользователь наследовали от базового класса Copiable с помощью DoCopy, но это все равно кажется неправильным.)