C# 如何动态更改HybridWebView(iOS)Uri?

C# 如何动态更改HybridWebView(iOS)Uri?,c#,xamarin,xamarin.forms,xamarin.ios,wkwebview,C#,Xamarin,Xamarin.forms,Xamarin.ios,Wkwebview,我的应用程序中有一个HybridWebView,我需要动态更改uri(当用户单击某个菜单时,uri会更改),但它根本不会更改。。。我使用WebView,它工作得很好,但是当我使用HybridWebView时,Uri没有改变 这个ContentView是我的HybridWebView,它位于绝对布局中 <ContentView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.Layo

我的应用程序中有一个
HybridWebView
,我需要动态更改uri(当用户单击某个菜单时,uri会更改),但它根本不会更改。。。我使用
WebView
,它工作得很好,但是当我使用
HybridWebView
时,Uri没有改变

这个ContentView是我的HybridWebView,它位于绝对布局中

    <ContentView AbsoluteLayout.LayoutFlags="All"
                 AbsoluteLayout.LayoutBounds="0,0,1,1" 
                 x:Name="contentView">
            <local1:HybridWebView x:Name="hybridWebView"/></ContentView>
这是我的HybridWebView类:

 public class HybridWebView : WebView
 {
    Action<string> action;
    
    public static readonly BindableProperty UriProperty = BindableProperty.Create(
            propertyName: nameof(Uri),
            returnType: typeof(string),
            declaringType: typeof(HybridWebView),
            defaultValue: default(string));

    public string Uri
    {
        get { return (string)GetValue(UriProperty); }
        set { SetValue(UriProperty, value); }
    }

    public void RegisterAction(Action<string> callback)
    {
        action = callback;
    }
    public void Cleanup()
    {
        action = null;
    }

    public void InvokeAction(string data)
    {
        if (action == null || data == null)
        {
            return;
        }
        action.Invoke(data);
    }

    public HybridWebView()
    {
    }
}
公共类HybridWebView:WebView
{
行动;
公共静态只读BindableProperty UriProperty=BindableProperty.Create(
propertyName:nameof(Uri),
returnType:typeof(字符串),
declaringType:typeof(HybridWebView),
defaultValue:默认值(字符串));
公共字符串Uri
{
获取{return(string)GetValue(UriProperty);}
set{SetValue(UriProperty,value);}
}
公共无效注册表操作(操作回调)
{
动作=回调;
}
公共空间清理()
{
action=null;
}
公共void InvokeAction(字符串数据)
{
if(action==null | | data==null)
{
返回;
}
调用(数据);
}
公共HybridWebView()
{
}
}

我刚才是这样解决的:

受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e) { base.OnElementPropertyChanged(发送方,e)


我必须添加OnElementPropertyChanged以通过CustomRenderer动态更改url

嗨,你能分享代码如何更改
HybridWebView
的url吗?此外,你还可以分享
HybridWebView
的代码,最好知道原因。嗨,我在那里添加了代码…谢谢!太好了!很高兴你已经解决了这个问题。记得在可能的时候标出答案。
 public class HybridWebView : WebView
 {
    Action<string> action;
    
    public static readonly BindableProperty UriProperty = BindableProperty.Create(
            propertyName: nameof(Uri),
            returnType: typeof(string),
            declaringType: typeof(HybridWebView),
            defaultValue: default(string));

    public string Uri
    {
        get { return (string)GetValue(UriProperty); }
        set { SetValue(UriProperty, value); }
    }

    public void RegisterAction(Action<string> callback)
    {
        action = callback;
    }
    public void Cleanup()
    {
        action = null;
    }

    public void InvokeAction(string data)
    {
        if (action == null || data == null)
        {
            return;
        }
        action.Invoke(data);
    }

    public HybridWebView()
    {
    }
}
    if (Control.Url != null)
    {
        var idn = new System.Globalization.IdnMapping();
        var dotnetUri = new System.Uri(Element.Uri);
        _url = ((HybridWebView)Element).Uri;

        NSUrl nsUrl = new NSUrl(dotnetUri.Scheme, idn.GetAscii(dotnetUri.DnsSafeHost), dotnetUri.PathAndQuery);
        Control.LoadRequest(new NSUrlRequest(nsUrl));
    }
}