如何将对象传递给Xamarin Forms自定义渲染器?

Pur*_*ome 10 xamarin xamarin.forms

如何将某个对象的实例传递给Xamarin Forms custom render

这是自定义渲染器......

public class LoginPageRenderer : PageRenderer
{
    public override void ViewDidAppear (bool animated)
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的......(注意ctor已被添加......)

public class LoginPageRenderer : PageRenderer
{
    private SomeFoo _someFoo;

    public LoginPageRenderer(MyFoo someFoo)
    {
        _someFoo = someFoo;
    }

    public override void ViewDidAppear (bool animated)
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,这是调用此视图的位置(在代码的其他部分).

await _navigationPage.Navigation.PushModalAsync(new LoginPage());

Wil*_*ker 9

如果在LoginPage对象中定义可公开访问的属性,则可以Renderer使用using Element.NameOfYourProperty语法引用它.

由PureKrome更新

示例代码......

LoginPage.cs(在你的PCL常见项目中).

namespace Foo
{
    public class LoginPage : ContentPage
    {
        private readonly Foo _foo;

        public LoginPage(Foo foo)
        {
            _foo = foo;
        }

        public Foo Foo { get; private set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

LoginPageRenderer.cs(在您的iOS项目中)

[assembly: ExportRenderer (typeof (LoginPage), typeof (LoginPageRenderer))]

namespace Foo.iOS
{
    public class LoginPageRenderer : PageRenderer
    {
        private Foo Foo
        {
            get
            {
                var loginPage = Element as LoginPage;
                return loginPage == null
                    ? null
                    : loginPage.Foo; 
            }
        }

        public override void ViewDidAppear (bool animated)
        {
            if (string.IsNullOrWhitespace(Foo.SecretName))
            { ... }

            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)