@AlexSofar

Как грамотно сделать превязку данных к контекстному меню кнопки WPF пиложения?

Пишу очень полезную программу для тех кто устал хранить всю информацию в папках и блокнотах о любимом софте (шоткаты, параметры запуска и т.д). Решил что программа будет развиваться и по этому нужно выбрать грамотную архитектуру, для расширения приложения, по мне так MVVM подходит. Ладно, ближе к сути. Нужно создать контекстное меню кнопки для выбора и добавления нового поля. У меня уже есть решение для контекстного меню кнопки, но оно не идеальное так как статическое, жеско закодировано в xaml разметке. По требования моего приложения нужно динамический добавлять команды в контекстное меню из приложения. Для вывода элементов я решил использовать коллекции, создал шаблон данных и вроде бы все хорошо — но результат меня не устроил. При наведении курсора на элемент отображается два выделения, срабатывает выделения для контекстного элемента, а внутри него для меню элемента. Как это можно пофиксисть.

5bb8948385355064986064.jpeg
XAML
<Button
    x:Name="AddField"
    Width="103"
    Height="25"
    Margin="0,10,34,10"
    HorizontalAlignment="Right"
    Content="Добавить поле">
    <Button.ContextMenu>
        <ContextMenu ItemsSource="{Binding MenuItem}">
            <ContextMenu.ItemTemplate>
                <DataTemplate>
                    <MenuItem
                        Header="{Binding Name}"/>
                </DataTemplate>
            </ContextMenu.ItemTemplate>
        </ContextMenu>
    </Button.ContextMenu>
</Button>

C# коде: (ViewModel)
public List<MenuItemModel> MenuItem { get; set; } = new List<MenuItemModel>()
{
    new MenuItemModel() { Name = "Автор"},
    new MenuItemModel() { Name = "Версия"},
    new MenuItemModel() { Name = "Лицензия"},
    new MenuItemModel() { Name = "Авторские права"},
    new MenuItemModel() { Name = "Официальный сайт"},
    new MenuItemModel() { Name = "Лицензионный ключ"},
    new MenuItemModel() { Name = "Источник"},
    new MenuItemModel() { Name = "Хеш-суммы"}
};
  • Вопрос задан
  • 524 просмотра
Решения вопроса 1
@OwDafuq
Для чего использовать MenuItemModel? Что там такого есть, чего нету в MenuItem?
View:
<Button x:Name="AddField"
		Width="103"
		Height="25"
		Margin="15"
		HorizontalAlignment="Right"
		Content="Добавить поле">
	<Button.ContextMenu>
		<ContextMenu ItemsSource="{Binding MenuItems}"/>
	</Button.ContextMenu>
</Button>


ViewModel:
public class MainVM
{
	public List<MenuItem> MenuItems { get; set; }

	public MainVM()
	{
		MenuItems = new List<MenuItem>()
		{
			new MenuItem() { Header = "Автор", Command = Author},
			new MenuItem() { Header = "Версия"},
			new MenuItem() { Header = "Лицензия"},
			new MenuItem() { Header = "Авторские права"},
			new MenuItem() { Header = "Официальный сайт"},
			new MenuItem() { Header = "Лицензионный ключ"},
			new MenuItem() { Header = "Источник"},
			new MenuItem() { Header = "Хеш-суммы"}
		};
	}

	public ICommand Author => new DelegateCommand(() =>
	{
		MessageBox.Show("Author");
	});
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы