Команда PRISM для включения отправителя, команда OnNavigated для включения отправителя WebBrowser - PullRequest
0 голосов
/ 13 февраля 2020

Я хотел бы включить объект sender в DelegateCommand моего ViewModel.

<WebBrowser>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Navigated">
            <prism:InvokeCommandAction  
                        Command="{Binding NavigatedCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</WebBrowser>


private DelegateCommand<NavigationEventArgs> _onNavigated;
public DelegateCommand<NavigationEventArgs> NavigatedCommand => _onNavigated ?? (_onNavigated = new DelegateCommand<NavigationEventArgs>(OnNavigated, (e) => true));

private void OnNavigated(NavigationEventArgs e)
{
//TODO add code to access the WebBrowser.Document property
}

Это не работает:

private DelegateCommand<WebBrowser, NavigationEventArgs> _onNavigated;

Что такое команда делегата?

1 Ответ

0 голосов
/ 24 февраля 2020

Вы хотите использовать i:InvokeCommandAction вместо prism:InvokeCommandAction.

Я не знаю, почему вариант призмы не работает с CommandParameter, но интерактивный делает ...

Просмотр:

<WebBrowser>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Navigated">
            <i:InvokeCommandAction Command="{Binding NavigatedCommand}"
                                   CommandParameter="{Binding Path=Document, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type WebBrowser}}}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</WebBrowser>

Просмотр модели:

public SomeWindowViewModel()
{
    NavigatedCommand = new DelegateCommand<object>( x => { /* x is the browser's Document here */ } );
}

public DelegateCommand<object> NavigatedCommand { get; }
...