Я пытаюсь худо-бедно реализоввывать паттерн MVVM. При создании MenuItem возникли впросы по поводу привязки данных. Сейчас у меня в Model такая картина:
var menuCopyCutPasteDelete = new MenuItem[]
{
new MenuItem(){Header = "Копировать"},
new MenuItem(){Header = "Вырезать"},
new MenuItem(){Header = "Вставить"},
new MenuItem(){Header = "Удалить"},
};
var commands = new Model.Command[]
{
new Model.Command(Model.FileBrowserManagers.Copy),
new Model.Command(Model.FileBrowserManagers.Transfer),
new Model.Command(Model.FileBrowserManagers.PasteAsync),
new Model.Command(Model.FileBrowserManagers.Delete),
};
for (int i = 0; i < menuCopyCutPasteDelete.Length; i++)
{
int a = i;
menuCopyCutPasteDelete[a].Click += (sender,e) => commands[a].Execute(sender);
}
Выглядит очень ужасно. Возможно я должен создавать MenuItem элементы в xaml и биндить к ним ивенты? Или есть другой вариант? Подскажите пожалуйста.
Описываете в xaml меню:
<Menu>
<MenuItem Header="Файл">
<MenuItem Header="Копировать" Command="{Binding CopyCommand}"/>
<MenuItem Header="Вырезать" Command="{Binding CutCommand}"/>
<MenuItem Header="Вставить" Command="{Binding PasteCommand}"/>
<MenuItem Header="Удалить" Command="{Binding DeleteCommand}"/>
</MenuItem>
</Menu>
В VM создаете команды(реализации ICommand есть такие как DelegateCommand, RelayCommand, можно найти в интернете):
public class MainVM : BaseVM
{
public ICommand CopyCommand { get; }
public ICommand CutCommand { get; }
public ICommand PasteCommand { get; }
public ICommand DeleteCommand { get; }
}
в WPF есть стандартные уже реализованные команды попробуй их:
<MenuItem Header="Edit">
<MenuItem Command ="ApplicationCommands.Copy"/>
<MenuItem Command ="ApplicationCommands.Cut"/>
<MenuItem Command ="ApplicationCommands.Paste"/>
<MenuItem Command ="ApplicationCommands.Delete"/>
</MenuItem>
Эти команды даже сами назначят горячее клавиши и Header для MenuItem
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости