Как создать ReactiveCommand, который получает строку в ReactiveUI 7 с помощью Xamarin Forms

В моем LoginPage.xaml.cs у меня есть веб-просмотр wview. Я хочу выполнить команду в моей ViewModel, когда событие Navigated запускается в моем wview. Моя команда должна получить URL-адрес из моего веб-просмотра.

LoginPage.xaml.cs:

protected override void OnAppearing()
{
    base.OnAppearing();
    Observable.FromEventPattern<WebNavigatedEventArgs>(
        ev => wview.Navigated += ev,
        ev => wview.Navigated -= ev)
        .Select(x => x.EventArgs.Source.ToString())
        .InvokeCommand(ViewModel.VerifyCallbackUrl);
}

Как мне создать команду, которая может на это отреагировать? Следующий код не компилируется (действие делегирования не принимает 1 аргумент):

public ReactiveCommand<string,System.Reactive.Unit> VerifyCallbackUrl { get; protected set; }

public LoginViewModel(IScreen hostScreen = null) : base(hostScreen) 
{   
    VerifyCallbackUrl = ReactiveCommand<string, System.Reactive.Unit>
        .Create(xUrl => 
        {
            DoSomethingUseful();
        }); 
}

person jtourlamain    schedule 15.12.2016    source источник


Ответы (1)


Укажите явно аргумент типа действия, и оно будет скомпилировано:

public LoginViewModel(IScreen hostScreen = null) : base(hostScreen)
{
    VerifyCallbackUrl = ReactiveCommand.Create(new Action<string>(xUrl => { DoSomethingUseful(); }));
}
person mm8    schedule 15.12.2016
comment
Вот хорошее руководство это происходит с командами в ReactiveUI и Xamarin Forms. - person mmacneil007; 16.02.2017