XAML WebView绑定到HTML源无法正常工作

时间:2016-04-07 04:57:22

标签: xaml xamarin xamarin.forms freshmvvm

我定义了一个XAML页面布局,其中包含从HTML字符串填充的WebView

<WebView HorizontalOptions="Fill" VerticalOptions="FillAndExpand">
    <WebView.Source>
        <HtmlWebViewSource Html="{Binding Flag.Description}" />
<!--    <HtmlWebViewSource Html="&lt;html>&lt;body>&lt;p>The HTML string.&lt;/p>&lt;/body>&lt;/html>" />-->
    </WebView.Source>
</WebView>

当我将字符串硬编码到XAML中时,它会正确显示,但它不会绑定到Flag.Description字符串。 XAML包含几个正确绑定的标签,但我找不到WebView源无法正确绑定的任何原因。

5 个答案:

答案 0 :(得分:7)

我无法让绑定在XAML中工作,但是有一个基于代码的解决方案。我使用FreshMvvm所以在页面模型中(不是XAML页面的代码隐藏)我创建了一个引用HTML字符串的新属性:

public HtmlWebViewSource WebViewSource
{
    get { 
        return new HtmlWebViewSource { Html = Flag.Description }; 
    }
}

XAML页面中的WebView元素变为:

<WebView
    HorizontalOptions="Fill"
    VerticalOptions="FillAndExpand"
    Source="{Binding WebViewSource}" />

答案 1 :(得分:2)

接受的答案对我有用,但我会补充一点,它只适用于指定高度和宽度。

有一些组合可行:

1。 定义HeightRequest和WidthRequest

<WebView Source="{Binding HtmlSource}" HeightRequest="300" WidthRequest="250" />

2。 定义Horizo​​ntalOptions和VerticalOptions

<WebView x:Name="WebViewTermsOfService" Source="{Binding HtmlSource}" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" />

但是,当我将CenterAndExpand指定为值时,HTML无法呈现

答案 2 :(得分:0)

似乎Html的Binding HtmlWebViewSource属性似乎无法开箱即用。我认为IValueConverter会完成这项工作。请查看此answer中的完成情况。我认为这应该足够了

答案 3 :(得分:0)

Flag或Flag.Description会不会向WebView返回null?我遇到了同样的问题,事实证明,在使用适当的内容初始化之前,我的源的默认值为null。 WebView本质上会崩溃。当我将null更改为String.Empty时,它将起作用。

答案 4 :(得分:0)

public HtmlWebViewSource Description { get { var webView = "html content";return
 new HtmlWebViewSource { Html = webView };} }
<WebView
  HorizontalOptions="Fill"
  VerticalOptions="FillAndExpand"
  Source="{Binding Description}" />