Как привязать команду из MainViewModel к шаблонному элементу Menu в Avalonia UI?

В настоящий момент мой код в axaml таков:

<Menu
    Background="#1A1E27"
>

    <MenuItem
        Header="Открыть"
        ItemsSource="{Binding Projects}"
    >
        <MenuItem.ItemTemplate>
            <DataTemplate>
                <MenuItem
                    Header="{Binding Path=Name}"
                >
                    <MenuItem.Styles>
                        <Style
                            Selector="MenuItem MenuItem"
                        >
                            <Setter
                                Property="Command"
                                Value="{Binding OpenProjectCommand}"
                            />
                        </Style>
                    </MenuItem.Styles> 
                </MenuItem>
            </DataTemplate>
        </MenuItem.ItemTemplate>
    </MenuItem>

</Menu>

Projects - объект типа ObservableCollection<Project>. Приведенный axaml влечет вызов метода OpenProjectCommand в классе Project. Подскажите, пожалуйста, как я могу изменить контекст, чтобы осуществлялся вызов метода OpenProjectCommand, реализованного в моей ViewModel?


Ответы (2 шт):

Автор решения: Lavshyak

Нужно использовать атрибут Command.

Не все элементы поддерживают этот атрибут, может потребоваться, по-хорошему, написать свой View, который будет поддерживать Command, и, по-плохому, использовать атрибут OnClick (вызывает метод) на месте.

→ Ссылка
Автор решения: Mikhail

Есил бы ты привел код как у тебя реализована команда, было бы что посмотреть, потому-что у меня на menuitem без проблем накидывается command. Если прям никак, то попробуй сделать через event вызвав эту же команду через datacontext

 var dc = DataContext as MainWindowViewModel;
 dc.AddNewRow.Execute(tb.DataContext as MarkTable).Subscribe();

во второй строке я через метод вызываю свою команду, внутри Execute() записано обращение к тексблоку через мой класс MarkTable. Также можно не писать атрибуты для Execute, а просто оставить его пустым

var dc = DataContext as MainWindowViewModel;
dc.AddNewRow.Execute().Subscribe();

(Хотел написать коммент, но у меня репутации мало)

→ Ссылка