Xamarin - 来自另一个页面/视图的 WebView 更新 URL

Posted

技术标签:

【中文标题】Xamarin - 来自另一个页面/视图的 WebView 更新 URL【英文标题】:Xamarin - WebView update URL from another page/view 【发布时间】:2016-09-26 13:31:41 【问题描述】:

我有一个非常基本的选项卡式应用程序 第一页是使用 Xamarin.Forms 的 Web 视图

 <WebView x:Name="webview1" IsVisible="true" Source="" ></WebView>

我可以使用示例从后面的 .cs 代码更新此视图的 URL

 webview1.Source = "http://www.microsoft.com"

我有第二个标签用于设置/附加信息。 在第二页上,我有一个按钮,单击该按钮时我想将第 1 页上的 Web 视图重置为新的 Url/更新源。

只是试图在第二页上引用它告诉我,由于保护级别,我不能,并且需要静态项目的对象引用。

更新:

public partial class launcher5Page : ContentPage

    public launcher5Page()
    
        InitializeComponent();

        webview1.Source = "web address here";
    

    public static bool changeURL(string urlString)
    
        webview1.Source = urlString;
        return true;
    

仍在获取 错误 CS0120:访问非静态成员需要对象引用

【问题讨论】:

只需在设置 webview 源的页面上创建一个公共方法(或属性),然后从您的其他页面调用它 您不能使用静态方法来修改类的特定实例 一个例子 sn-p 会很好,我正在兜圈子试图找到答案。 【参考方案1】:

我建议使用MessagingCenter 来完成这样的工作。然后你可以这样做:

public partial class launcher5Page : ContentPage 

    public launcher5Page() 
        InitializeComponent();

        webview1.Source = "web address here";

        /* Normally you want to subscribe in OnAppearing and unsubscribe in OnDisappearing but since another page would call this, we need to stay subscribed */
        MessagingCenter.Unsubscribe<string>(this, "ChangeWebViewKey");
        MessagingCenter.Subscribe<string>(this, "ChangeWebViewKey", newWebViewUrl => Device.BeginInvokeOnMainThread(async () => 
            webview1.Source = newWebViewUrl;
        ));
    

然后在您的其他页面上:

 Xamarin.Forms.MessagingCenter.Send("https://www.google.com", "ChangeWebViewKey");

【讨论】:

【参考方案2】:

您的changeURL 方法标记为static,这意味着它不能使用未标记为静态的任何内容。 Learn more about what static means..

由于类launcher5Page 是一个部分类,可以想象在sn-p 中使用的webview1 变量是在类的不同部分中定义的。 webview1 被称为类 launcher5Pagemember,因为它是在任何方法之外和类内部定义的。

您的解决方案:从您的changeURL 方法中删除static 关键字,或将webview1 成员设为static,以便static 等其他static 成员可以使用它。

public **partial** class launcher5Page : ContentPage

    public launcher5Page()
    
        InitializeComponent();

        webview1.Source = "web address here";
    

    public **static** bool changeURL(string urlString)
    
        **webview1**.Source = urlString;
        return true;
    

此外,所有这些都与 Xamarin 完全无关,除了 Xamarin 是一组用 c# 编写的库。你的问题完全在于你缺乏c#语言的知识。

【讨论】:

以上是关于Xamarin - 来自另一个页面/视图的 WebView 更新 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 表单的另一个视图中重用缓存的图像

Xamarin 绑定到列表视图项模板中的另一个元素

Xamarin Forms 1 视图绑定到多个对象

Xamarin MVVM 从另一个页面删除 Listview 项目

在 Xamarin.Forms MvvmCross 中存储视图

第二次推送视图控制器xamarin ios后需要触摸以与tableview交互