获取在 ExportRenderer 中调用 PageRenderer 的 ContentPage 的类型
Get the type of calling ContentPage of a PageRenderer within a ExportRenderer
我一直在关注这个答案,以便在我的 Xamarin 页面加载时告诉我。
粗略的想法是,一旦 PageRenderer
附加到 Window,它就会将 PageLoaded
消息发送到 MessagingCenter
和我的 MainPage
订阅该消息的人将做出反应。
然而,此实现的问题在于,任何时候 ContentPage
触发 OnAppearing
它都会触发 PageLoaded
发送,而不管 ContentPage
适用于它们全部.
我想知道是否有可能获得调用 ExportRenderer
的类型,因为我可以做类似 MessagingCenter.Send(new object(), $"{typeof(MainPage)}Loaded");
的事情,然后我只会订阅 ContentPage
这是我想要的地方。
[assembly: ExportRenderer(typeof(ContentPage), typeof(AdvancedPageRenderer))]
namespace MyRunCompanion.Droid.Renderer
{
public class AdvancedPageRenderer : PageRenderer
{
public AdvancedPageRenderer(Context context) : base(context)
{
AutoPackage = false;
}
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
MessagingCenter.Send(new object(), "PageLoaded");
}
}
}
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe<object>(new object(), "PageLoaded", (sender) =>
{
// Do something whenever the "PageLoaded" message is received
Console.WriteLine("Do something whenever the PageLoaded message is received");
});
}
}
更好的方法是在自定义渲染器中进行测试,并且仅在正在渲染的 ContentPage
是 MainPage
Class(需要 class) 实例。这可以使用 Element
属性:
来实现
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
if (Element is MainPage)
MessagingCenter.Send(new object(), "PageLoaded");
}
但是如果出于某些原因你想坚持你在问题中描述的内容,那么你可以使用:
MessagingCenter.Send(new object(), Element.GetType().Name + "Loaded");
我一直在关注这个答案,以便在我的 Xamarin 页面加载时告诉我。
粗略的想法是,一旦 PageRenderer
附加到 Window,它就会将 PageLoaded
消息发送到 MessagingCenter
和我的 MainPage
订阅该消息的人将做出反应。
然而,此实现的问题在于,任何时候 ContentPage
触发 OnAppearing
它都会触发 PageLoaded
发送,而不管 ContentPage
适用于它们全部.
我想知道是否有可能获得调用 ExportRenderer
的类型,因为我可以做类似 MessagingCenter.Send(new object(), $"{typeof(MainPage)}Loaded");
的事情,然后我只会订阅 ContentPage
这是我想要的地方。
[assembly: ExportRenderer(typeof(ContentPage), typeof(AdvancedPageRenderer))]
namespace MyRunCompanion.Droid.Renderer
{
public class AdvancedPageRenderer : PageRenderer
{
public AdvancedPageRenderer(Context context) : base(context)
{
AutoPackage = false;
}
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
MessagingCenter.Send(new object(), "PageLoaded");
}
}
}
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
base.OnAppearing();
MessagingCenter.Subscribe<object>(new object(), "PageLoaded", (sender) =>
{
// Do something whenever the "PageLoaded" message is received
Console.WriteLine("Do something whenever the PageLoaded message is received");
});
}
}
更好的方法是在自定义渲染器中进行测试,并且仅在正在渲染的 ContentPage
是 MainPage
Class(需要 class) 实例。这可以使用 Element
属性:
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
if (Element is MainPage)
MessagingCenter.Send(new object(), "PageLoaded");
}
但是如果出于某些原因你想坚持你在问题中描述的内容,那么你可以使用:
MessagingCenter.Send(new object(), Element.GetType().Name + "Loaded");