Windows 8 在Windows 8应用程序中将类对象作为参数传递,并在单击事件时接收它们

Windows 8 在Windows 8应用程序中将类对象作为参数传递,并在单击事件时接收它们,windows-8,c++-cx,Windows 8,C++ Cx,作为参数传递的对象仅在导航事件中接收。我想在点击事件时收到它们,我应该使用什么来代替参数 void App1::MainPage::btuN_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { Variables^ data = (Variables^)e->OriginalSource; if (data->sNotf!=nullptr) Frame->Navigat

作为参数传递的对象仅在导航事件中接收。我想在点击事件时收到它们,我应该使用什么来代替参数

void App1::MainPage::btuN_Click(Platform::Object^ sender,     Windows::UI::Xaml::RoutedEventArgs^ e)
{
Variables^ data = (Variables^)e->OriginalSource;
if (data->sNotf!=nullptr)
    Frame->Navigate(TypeName(BlankPage3::typeid), data);
}
我使用了OriginalSource,但它不起作用。有人能帮我吗?属性中包含对引发事件的对象的引用。它与导航参数无关

我不确定您希望在按钮单击事件中访问哪些参数。在页面导航事件中传递到页面的内容?在这种情况下,您应该处理所述导航事件,在那里检索参数并将其存储到页面的私有字段中。在click event中,您可以从private字段中读回并向前传递它们


另一个相关的注意事项是:将非基本类型作为导航参数传递是非常困难的。如果需要这样做,最好只传递对象ID并从公共存储库读取其在页面中的值。

当导航到页面时,如果导航事件中的参数很重要,则应将其存储在页面对象中,以便以后可以访问

//MainPage needs to have a private Variables^ named Info
void MainPage::OnNavigatedTo(NavigationEventArgs^ e)
{
  if(e->Parameter)
    this->Info = dynamic_cast<Variables^>(e->Parameter);
}

我在OnNavigatedTo事件上传递对象并接收的页面也将被另一个页面访问。因此,每当我从一个我不想传递对象的页面导航时,它就会给出一个错误。@WaqasAhmedAnsari那么,你是从两个不同的页面导航到同一个目标页面,一个是传入参数,一个是不传入参数?在这种情况下,如果
e->Parameter
null
,只需在导航到
时签入
,不要尝试在这种情况下读取它。我对这里很陌生,很困惑。还有一件事,既然代码变量^data=(Variables^)e->Parameter;?已经读取了它,我怎么能不接收它呢;????我是否检查(data->sNotf==nullptr)是否像这样?如果我这样做,那么下一行是什么?非常感谢你,先生@WaqasAhmedAnsari我不确定哪一部分让你困惑。您说过,您希望从两个不同的位置打开同一页,一个是带参数的,另一个是不带参数的。通过将
on导航到
,您可以检测页面的加载方式并做出相应的反应。Andy为您提供了如何在页面中存储参数以供将来使用的示例,例如,
单击
事件。还有一件事:当你从没有参数的位置打开页面时,会创建一个新的页面实例——之前可能传递给该页面的参数在其中不可用。我不知道为什么,我有点困惑!当我从不想传递对象的页面导航时,它会检查是否传递了对象。如果它确保没有传递任何对象,即传递空对象,那么接下来我将做什么?
void MainPage::btuN_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
  if(this->Info)
    if (this->Info->sNotf!=nullptr)
      Frame->Navigate(TypeName(BlankPage3::typeid), Info);
}