如何覆盖WP8中另一个页面中的方法?

时间:2014-06-17 12:58:50

标签: c# visual-studio-2012 windows-phone-8 nfc method-overriding

我正在开发一款涉及通过ProximityDevice类读取NFC标签的应用。这个想法是当在main_page上成功读取标记时,它将导航到second_page,其中将完成标记内容的所有处理。当它到达second_page时,应用程序必须不能再读取任何标记,除非它返回到main_page。

问题是当应用导航到second_page时,它仍会读取标签并执行我在main_page上声明的方法。看起来这些方法是在second_page上继承的。

有没有办法: (1)完全禁用读取接近设备,并在必要时重新启用它;要么 (2)从main_page覆盖继承的方法?

我试过了: (1)在导航到下一页之前使用stopSubscribingForMessage,但它仍然读取后续标签; (2)在second_page上声明读取标签的新方法 - 执行这些新方法,使用main_page中的方法执行。

这是我的代码:

(main_page)

public MainPage()
{
InitializeComponent();
device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.DeviceArrived += ProximityDeviceArrived;
        }
        else
        {
            MessageBox.Show("Failed to initialize proximity device.");
        }

}

public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}

public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
//reads tag content
sender.StopSubscribingForMessage(message.SubscriptionId);
    NavigationService.Navigate(new Uri("/Result.xaml?tagContent=" + tagContent, UriKind.Relative));
}   

(second_page)

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
        base.OnNavigatedTo(e);
        string tagContent = NavigationContext.QueryString["tagContent"];
        //process tag content
    device = ProximityDevice.GetDefault();
        if (device != null)
        {
            device.DeviceArrived += ProximityDeviceArrived;
        }
        else
        {
            MessageBox.Show("Failed to initialize proximity device.");
        }
}

public void ProximityDeviceArrived(Windows.Networking.Proximity.ProximityDevice device)
{
        device.SubscribeForMessage("NDEF", ProcessDeviceMessage);
}

public void ProcessDeviceMessage(ProximityDevice sender, ProximityMessage message)
{
        Debug.WriteLine("You tapped your tag again. I will do nothing.");
}

我真的希望你能帮助我!

1 个答案:

答案 0 :(得分:1)

这些方法不会被第二页继承,只是你没有正确地从邮件中取消订阅。

您是否尝试使用SubscribeFromMessage()的返回值代替message.SubscriptionId来呼叫StopSubscribingForMessage()

这是API文档建议的内容。