Xamarin формирует шоу Binded Webview на Android, но не на IOS из ожидаемой задачи - PullRequest
0 голосов
/ 03 мая 2018

Я создал новый проект Xamarin Forms Prism, чтобы дублировать эту проблему, возникающую у меня с моим настоящим приложением. Я хочу зайти на свой веб-сервис данных и получить объявления для первой страницы моего приложения. Это просто строка HTML, поэтому я использую WebView, и мой MainPage.xaml выглядит так.

<?xml version="1.0" encoding="utf-8" ?>

<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Button Text="Go to page 1" Command="{Binding NextPageCommand}"/>
<WebView x:Name="webView"  WidthRequest="1000" HeightRequest="1000" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
    <WebView.Source>
        <HtmlWebViewSource Html="{Binding Announcements}"/>
    </WebView.Source>
</WebView>
</StackLayout>

И моя ViewModel

using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BlankApp1.ViewModels
{
    public class MainPageViewModel : ViewModelBase,INavigatedAware
    {
    public MainPageViewModel(INavigationService navigationService) 
    : base (navigationService)
    {
        Title = "Main Page";
        NextPageCommand = new DelegateCommand(NextPage);
    }
    public DelegateCommand NextPageCommand { get; }
    private string _announcements;
    public string Announcements
    {
        get { return _announcements; }
        set { SetProperty(ref _announcements, value); }

    }
    private async void NextPage()
    {
        await NavigationService.NavigateAsync("Page1");

    }
    public async void OnNavigatedTo(NavigationParameters parameters)
    {

        if (Announcements == null)
        {
            Announcements = "<html><body>" + "Working Shows this HTML in the Webview" + "</body></html>";
        }
        else
        {
            Announcements = "<html><body>" + "Not Working, Didnt update with this new HTML" + "</body></html>";
        }

    }        
    public async void OnNavigatedFrom(NavigationParameters parameters)
    {
        //throw new NotImplementedException();
    }
}

}

В функции OnNavgatedTo он не обновляет HTML-код, отображаемый при переходе от этой страницы и последующем возврате.

Если кто-нибудь знает, почему это может работать на Android, но не на iOS, пожалуйста, дайте мне знать. Я смотрю на это в течение 2 дней и до сих пор не могу заставить его отображаться так же, как на Android

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Если вы хотите изменить содержимое WebView, попробуйте связать его HtmlWebViewSource вместо Html.

Создайте HtmlWebViewSource недвижимость в вашей модели:

private HtmlWebViewSource _webviewSource;
public HtmlWebViewSource WebviewSource
{
    get { return _webviewSource; }
    set
    {
        SetProperty(ref _webviewSource, value);
    }
}

Затем свяжите это как:

<WebView x:Name="webView"  WidthRequest="1000" HeightRequest="1000" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Source="{Binding WebviewSource}">

Если вы хотите изменить его, попробуйте следующее:

if (WebviewSource == null)
{
    WebviewSource = new HtmlWebViewSource { Html = "<html><body>" + "Working Shows this HTML in the Webview" + "</body></html>" };
}
else
{
    WebviewSource = new HtmlWebViewSource { Html = "<html><body>" + "Not Working, Didnt update with this new HTML" + "</body></html>" };
}
0 голосов
/ 06 мая 2018

Честно говоря, я не совсем понимаю, что вы пытаетесь сделать с Task.Run.

Просто сделай:

public async void OnNavigatedTo(NavigationParameters parameters)
{
    try
    {
        //GetAnnouncements
        Announcements = "<html><body>" + await App.dataService.GetAnnouncements() + "</body></html>";
    }
    catch (System.OperationCanceledException ex)
    {
        Console.WriteLine($"announcement load cancelled: {ex.Message}");
    }

Также я думаю, что в новейших версиях Prism есть методы навигации, основанные на задачах.

Обновление:

Вы обновили свой вопрос. Я подозреваю, что ваша проблема в том, что вы не переходите к своему MainPage, а делаете MainPage = new MainPage(). Следовательно, OnNavigatedTo никогда не вызывается, а Announcement никогда не устанавливается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...