Xamarin - 来自其他页面/视图的WebView更新URL

时间:2016-09-26 13:31:41

标签: c# xamarin xamarin.forms

我有一个非常基本的标签应用程序 第一页是使用Xamarin.Forms

的Web视图
 <WebView x:Name="webview1" IsVisible="true" Source="" ></WebView>

我可以使用例如

从后面的.cs代码更新此视图的URL
 webview1.Source = "http://www.microsoft.com"

我有第二个标签,我用它来设置/附加信息。 在第二页上,我有一个按钮,点击后我想将第1页上的网页视图重置为新的网址/更新资源。

只是尝试在第二页上引用它告诉我,由于保护级别而无法使用静态项目的对象引用。

更新

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:访问非静态成员

需要对象引用

2 个答案:

答案 0 :(得分:3)

我建议使用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");

答案 1 :(得分:1)

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

由于类launcher5Page是一个部分类,因此可以想象代码段中使用的webview1变量是在类的不同部分中定义的。 webview1被称为类member的{​​{1}},因为它是在任何方法之外和类中定义的。

您的解决方案:从launcher5Page方法移除static关键字,或将changeURL成员webview1设为static其他static成员,例如{{} 1}}可以使用它。

changeURL

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