Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin页面完全加载时发生的事件?_C#_Android_Ios_Windows_Xamarin - Fatal编程技术网

C# Xamarin页面完全加载时发生的事件?

C# Xamarin页面完全加载时发生的事件?,c#,android,ios,windows,xamarin,C#,Android,Ios,Windows,Xamarin,社区 事先,如果这真的有一个简单的解决方案,我道歉。考虑到我在Xamarin方面的技术水平,我有一个棘手的问题需要解决 问题在于,当页面完全显示时,Xamarin似乎没有可调用的事件/函数/etc,因为您可以看到页面应该显示的所有内容,然后调用该函数。请注意,对我不起作用的是OnAppearing函数,因为它在屏幕可见之前就过早启动了 我试图破译一个解决方案。在本文中,用户使用以下代码进行回答 以下是步骤1): 步骤2) 步骤3) 首要关注点。我创建了一个ViewModel文件,它位于一个名为“

社区

事先,如果这真的有一个简单的解决方案,我道歉。考虑到我在Xamarin方面的技术水平,我有一个棘手的问题需要解决

问题在于,当页面完全显示时,Xamarin似乎没有可调用的事件/函数/etc,因为您可以看到页面应该显示的所有内容,然后调用该函数。请注意,对我不起作用的是OnAppearing函数,因为它在屏幕可见之前就过早启动了

我试图破译一个解决方案。在本文中,用户使用以下代码进行回答

以下是步骤1):

步骤2)

步骤3)

首要关注点。我创建了一个ViewModel文件,它位于一个名为“ViewModels”的文件夹中,在链接中发布代码的用户说要在视图模型中创建一个属性,出于某种原因,我收到一个错误,声明“名称集属性在当前上下文中不存在”。那么,我可以交换掉代码,只放下面的代码吗?我的意思是看起来是一样的,对吧

public bool Temp
{
    get { return _toggleTemp; }
    set { _toggleTemp = value; }
}
第二个问题。我不知道他的代码中“LoadingVm”是什么。这对我来说不合适。是不是因为我在顶部漏了一个“使用”字?但无论如何,整个代码行都是“LoadingVm.ToggleTemp=true;”,所以他只是调用函数将其设置为true

最后,我想这无疑会帮助我在页面完全加载后,在我可以做任何我想做的事情的地方运行代码,对吗?我真的没有看到太多人不同意链接中那个家伙给出的方法,但如果是这样,请随意给出其他建议


再次,如果这是一个简单的错误,请原谅我。我仍然习惯于Xamarin,而C#在我的脑海中仍然有些新鲜,因为我已经有一段时间没有使用它了。

您可以使用ContentPage的自定义呈现程序来了解视图是否已完全加载,然后使用它来通知您的共享项目:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        Console.WriteLine("OnAppearing");

        MessagingCenter.Subscribe<object>(new object(), "ViewLoaded", (sender) =>
        {
            // Do something whenever the "ViewLoaded" message is received
            Console.WriteLine("Do something whenever the ViewLoaded message is received");
        });
    }
}
在iOS中:

[assembly:ExportRenderer (typeof(ContentPage), typeof(CameraPageRenderer))]
namespace App362.iOS
{
    public class CameraPageRenderer : PageRenderer
    {

        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            Console.WriteLine("ViewDidAppear");

            MessagingCenter.Send<object>(new object(), "ViewLoaded");

        }

    }     
}
[程序集:导出呈现程序(typeof(ContentPage)、typeof(CameraPageRenderer))]
名称空间App362.iOS
{
公共类CameraPageRenderer:页面渲染器
{
公共覆盖无效视图显示(布尔动画)
{
基本视图显示(动画);
Console.WriteLine(“视图显示”);
Send(新对象(),“ViewLoaded”);
}
}     
}
在Android中:

[assembly: ExportRenderer(typeof(ContentPage), typeof(CameraPageRenderer))]
namespace App362.Droid
{
    [Obsolete]
    public class CameraPageRenderer : PageRenderer{

        protected override void OnAttachedToWindow()
        {
            base.OnAttachedToWindow();

            Console.WriteLine("OnAttachedToWindow");

            MessagingCenter.Send<object>(new object(), "ViewLoaded");
        }
    }

}
[程序集:导出呈现程序(typeof(ContentPage)、typeof(CameraPageRenderer))]
名称空间App362.Droid
{
[过时]
公共类CameraPageRenderer:页面渲染器{
受保护的覆盖无效OnAttachedToWindow()
{
base.OnAttachedToWindow();
Console.WriteLine(“OnAttachedToWindow”);
Send(新对象(),“ViewLoaded”);
}
}
}
在共享项目中:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        Console.WriteLine("OnAppearing");

        MessagingCenter.Subscribe<object>(new object(), "ViewLoaded", (sender) =>
        {
            // Do something whenever the "ViewLoaded" message is received
            Console.WriteLine("Do something whenever the ViewLoaded message is received");
        });
    }
}
public分部类主页面:ContentPage
{
公共主页()
{
初始化组件();
}
出现时受保护的覆盖无效()
{
base.OnAppearing();
控制台。写线(“OnAppearing”);
MessagingCenter.Subscribe(新对象(),“ViewLoaded”,(发件人)=>
{
//每当收到“ViewLoaded”消息时,请执行某些操作
WriteLine(“在收到ViewLoaded消息时执行操作”);
});
}
}

您可以使用ContentPage的自定义呈现程序来了解视图是否已完全加载,然后使用来通知您的共享项目:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        Console.WriteLine("OnAppearing");

        MessagingCenter.Subscribe<object>(new object(), "ViewLoaded", (sender) =>
        {
            // Do something whenever the "ViewLoaded" message is received
            Console.WriteLine("Do something whenever the ViewLoaded message is received");
        });
    }
}
在iOS中:

[assembly:ExportRenderer (typeof(ContentPage), typeof(CameraPageRenderer))]
namespace App362.iOS
{
    public class CameraPageRenderer : PageRenderer
    {

        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            Console.WriteLine("ViewDidAppear");

            MessagingCenter.Send<object>(new object(), "ViewLoaded");

        }

    }     
}
[程序集:导出呈现程序(typeof(ContentPage)、typeof(CameraPageRenderer))]
名称空间App362.iOS
{
公共类CameraPageRenderer:页面渲染器
{
公共覆盖无效视图显示(布尔动画)
{
基本视图显示(动画);
Console.WriteLine(“视图显示”);
Send(新对象(),“ViewLoaded”);
}
}     
}
在Android中:

[assembly: ExportRenderer(typeof(ContentPage), typeof(CameraPageRenderer))]
namespace App362.Droid
{
    [Obsolete]
    public class CameraPageRenderer : PageRenderer{

        protected override void OnAttachedToWindow()
        {
            base.OnAttachedToWindow();

            Console.WriteLine("OnAttachedToWindow");

            MessagingCenter.Send<object>(new object(), "ViewLoaded");
        }
    }

}
[程序集:导出呈现程序(typeof(ContentPage)、typeof(CameraPageRenderer))]
名称空间App362.Droid
{
[过时]
公共类CameraPageRenderer:页面渲染器{
受保护的覆盖无效OnAttachedToWindow()
{
base.OnAttachedToWindow();
Console.WriteLine(“OnAttachedToWindow”);
Send(新对象(),“ViewLoaded”);
}
}
}
在共享项目中:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        Console.WriteLine("OnAppearing");

        MessagingCenter.Subscribe<object>(new object(), "ViewLoaded", (sender) =>
        {
            // Do something whenever the "ViewLoaded" message is received
            Console.WriteLine("Do something whenever the ViewLoaded message is received");
        });
    }
}
public分部类主页面:ContentPage
{
公共主页()
{
初始化组件();
}
出现时受保护的覆盖无效()
{
base.OnAppearing();
控制台。写线(“OnAppearing”);
MessagingCenter.Subscribe(新对象(),“ViewLoaded”,(发件人)=>
{
//每当收到“ViewLoaded”消息时,请执行某些操作
WriteLine(“在收到ViewLoaded消息时执行操作”);
});
}
}

1)这不一样,您没有使用INotifyPropertyChanged,2)LoadingVM只是他的VM类别的名称1)我相信我以前尝试过将某种形式的“NotifyPropertyChanged”作为基类。但不知什么原因,我一定把事情搞砸了。我将尝试搜索需要包含的内容以访问它。2) 哦,可以理解。即使你把它包括在基类中,你仍然需要在你的属性集合中调用这个方法。我当然明白了。如果我以前不清楚的话,我只需要适当地包括它。上次我试的时候出现了几条红线。因此,我将再次尝试,并确保我将其称为属性设置器。我的解决方案对您有效吗?如果是,请您接受(单击☑️ 在这个答案的左上角)这样我们就可以帮助更多的人解决同样的问题:)。1)这不一样,你没有使用INotifyPropertyChanged,2)LoadingVM只是他的VM类别的名称1)我相信我尝试过包含某种形式的“Notif”