Я в настоящее время WebView в XAML, как показано здесьWebView Databinding только обновление раз
<StackLayout>
<WebView x:Name="PrimaryWebView" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<WebView.Source>
<HtmlWebViewSource Html="{Binding Path=ViewModel.HtmlSource}" />
</WebView.Source>
</WebView>
</StackLayout>
В моей ViewModel я имею
private String htmlSource = null;
public String HtmlSource
{
get
{
if (String.IsNullOrEmpty(htmlSource))
{
Device.BeginInvokeOnMainThread(async() =>
{
ScreenLoading();
var result = await contentController.Get(currentPage);
if (result != null)
{
HtmlSource = result.Content;
Heading = result.Name;
}
ScreenFinished();
});
// Returns empty while loading
return contentController.GetBlank();
}
// returns here once htmlSource is no longer empty
return htmlSource;
}
set
{
htmlSource = value;
RaisePropertyChanged(() => HtmlSource);
}
}
На мой взгляд, я это исправить известную ошибку
/// <summary>
/// FIX: Due to bug https://bugzilla.xamarin.com/show_bug.cgi?id=21699
/// </summary>
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
PrimaryWebView.Source.BindingContext = BindingContext;
}
На первой странице груз
- Мои ScreenLoading работает, показывая экран загрузки
- The GetBlank() работает и заполняет WebView правильно (я заполнил только с фиктивными данными для теста)
- ScreenFinished правильно работает и удаляет экран загрузки.
- НОМЕР: WebView не обновляет новый контент после его правильной передачи.
Может быть, я такой подход все неправильно, я не уверен, но тот факт, что ScreenLoading и ScreenFinished это все работает правильно, так как они изменяют связываемых свойства, которые правильно обновить на экране, я задаюсь вопросом, почему HtmlSource не делает то же самое.
Также необходимо отметить, что свойство заголовка, которое также обновляется правильно, связывает и обновляет экран по завершении. Это означает, что это именно то, что связано с HtmlWebViewSource в WebView, возможно, только на Windows Phone, на данный момент не может протестировать его на Android, потому что мой пробный период истек и просто ждет оплаты счета, пока я не могу раскошелиться на бизнес-лицензию , –