【问题标题】:Cannot Bind Xamarin WebView CanGoBack无法绑定 Xamarin WebView CanGoBack
【发布时间】:2019-01-13 13:45:11
【问题描述】:

Xamain.Forms 绑定 CanGoBack 和 CanGoForward 抛出错误:CanGoBack 不可访问。

它似乎适用于旧版本的 VS。

编辑:完整代码如下。

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WebViewDemo.WebViewDemoPage"> 
<ContentPage.Padding> 
<OnPlatform x:TypeArguments="Thickness" iOS="10, 20, 10, 0" Android="10, 0" WinPhone="10, 0" /> 
</ContentPage.Padding> 
<StackLayout> 
<Entry Keyboard="Url" Placeholder="web address" Completed="OnEntryCompleted" /> <StackLayout Orientation="Horizontal" BindingContext="{x:Reference webView}"> 

<Button Text="&#x21D0;" FontSize="Large" HorizontalOptions="FillAndExpand" IsEnabled="{Binding CanGoBack}" Clicked="OnGoBackClicked" /> 

<Button Text="&#x21D2;" FontSize="Large" HorizontalOptions="FillAndExpand" IsEnabled="{Binding CanGoForward}" Clicked="OnGoForwardClicked" /> 
</StackLayout>

 <WebView x:Name="webView" VerticalOptions="FillAndExpand" Source="https://xamarin.com" /> 
</StackLayout> 
</ContentPage>

代码背后

public partial class WebViewDemoPage : ContentPage 
{ 
  public WebViewDemoPage() 
  { 
     InitializeComponent();
  }

  void OnEntryCompleted(object sender, EventArgs args) 
  { 
    webView.Source = ((Entry)sender).Text; 
  } 

  void OnGoBackClicked(object sender, EventArgs args)
  { 
    webView.GoBack(); 
  } 

  void OnGoForwardClicked(object sender, EventArgs args) 
  { 
   webView.GoForward(); 
  } 
}

任何想法如何正确绑定它?

谢谢。

【问题讨论】:

  • 你有绑定这些属性的视图模型吗?
  • 我正在关注“使用 Xamarin.Forms 创建移动应用程序”一书。完整代码如下。只要我输入 IsEnabled="{Binding CanGoBack}" , CanGoBack 就会被标记为错误。我可以绑定其他变量而不会出错,例如。 IsEnabled="{绑定高度}"
  • 您可以删除项目中的obj和bin文件夹。然后清理并重建您的项目。我使用了您的代码,它工作正常。
  • 我认为这与VS2017有关。我正在使用 15.9.5 和 Xamarin 4.12.3.78。我已经建立了新项目,一旦我尝试映射 CanGoForward,VS 就会显示无法访问此 var 的错误。我尝试以不同的方式(上下文、源/路径等)绑定它,但我仍然遇到同样的错误。
  • 能否请您提供一个可以重现该问题的基本演示,以便我可以在身边进行测试。

标签: xamarin.forms binding


【解决方案1】:

我知道这个问题有点老了,但我想如果有人(比如我)需要解决这个问题,我会分享我的解决方案。

我通过完全放弃 Binding 并使用 WebView 的 PropertyChanged 事件来解决它:

在内容页面中:

<ContentPage>

    <StackLayout Margin="2">
        <StackLayout Orientation="Horizontal">

            <Button x:Name="btnBack" 
                    Text="Back" 
                    HorizontalOptions="Start"  
                    Clicked="OnBackButtonClicked" 
                    IsEnabled="False" />

            <Button x:Name="btnForward" 
                    Text="Fwd" 
                    HorizontalOptions="End"  
                    Margin="5"
                    Clicked="OnForwardButtonClicked" 
                    IsEnabled="False" />

        </StackLayout>

        <Label x:Name="labelLoading" Text="Loading..." IsVisible="false" />
        <WebView x:Name="webView" 
                 WidthRequest="1000" 
                 HeightRequest="1000" 
                 Navigated="WebViewNavigated" 
                 Navigating="WebViewNavigating" 
                 PropertyChanged="WebView_PropertyChanged"/>
    </StackLayout>
</ContentPage>

在后面的代码中:

private void WebViewNavigated(object sender, WebNavigatedEventArgs e)
{
    labelLoading.IsVisible = false;
}

private void WebViewNavigating(object sender, WebNavigatingEventArgs e)
{
    labelLoading.IsVisible = true;
}

private void WebView_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    switch(e.PropertyName)
    {
        case "CanGoBack":
            btnBack.IsEnabled = ((WebView)sender).CanGoBack;
            break;

        case "CanGoForward":
            btnForward.IsEnabled = ((WebView)sender).CanGoForward;
            break;
    }
}

我希望这对某人有所帮助...

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 2018-05-29
    • 2018-03-17
    • 2015-11-30
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2014-02-03
    相关资源
    最近更新 更多