В моем приложении Windows 10 Windows я хочу очистить код от событий и других вещей и сделать все в ViewModel, поэтому я использую Core: InvokeCommandAction для вызова команды в виртуальной машине, но я не знаю, как передать его отправителю и аргументы для события, переключение объекта кадраКак передать отправителя и аргументы события вызванной команде в ViewModel
<Frame x:Name="MyFrame" SourcePageType="{Binding MainFramePageType, Mode=TwoWay}">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="Navigated">
<Core:InvokeCommandAction Command="{Binding MyFrameNavigatedCommand}" CommandParameter="{Binding ElementName=MyFrame}"/>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Frame>
в VM:
public RelayCommand<object> MyFrameNavigatedCommand { get; private set; }
...
MyFrameNavigatedCommand = new RelayCommand<object>(MyNavigatedCommandExecuted);
...
private void MyNavigatedCommandExecuted(object sender)
{
(sender as Frame).BackStack.Clear();
}
Я понял это о отправителе, но как передать событие args тоже? Я также узнал, что если вы не укажете CommandParameter, отправляются EventArg. Есть ли способ отправить как объект отправителя, так и аргументы события? – nmrlqa4
Извините, я почему-то пропустил часть «отправителя» вашего вопроса. См. Мое редактирование. –
Мне нужно последнее уточнение для лучших практик. Поэтому, оставляя CommandParameter пустым, передает EventArgs в команду и добавление кадра в CommandParameter передает объект команде (если ожидается). Естественно, InvokeCommandAction не предназначен для отправки их обоих одновременно, поэтому мой вопрос заключается в том, что их лучше всего использовать (я полагаю, что оставить CommandParameter пустым, потому что это естественно) с точки зрения того, что вы не просматриваете ViewModel логике View, делая анти-шаблоны. Поскольку я полагал, что не так уж плохо иметь логику событий в кодексе, как решить, что? – nmrlqa4