在XAML页面之间传递变量

时间:2014-03-11 23:31:59

标签: c# xaml windows-phone-7 windows-phone-8

我有两个页面:Start.xaml.cs和Settings.xaml.cs。 在Setting.xaml.cs中,我只获得一次加速度计的数据并修复初始的posiotion。在Start.xaml.cs中,我连续读取加速度计的数据。我想从Settings.xaml.cs获取加速度计数据变量,并将它们带到Start.xaml.cs进行比较。你能帮我做一下,或者给我一些信息来源,我怎么能这样做?

Start.xaml.cs

的代码
Accelerometer acc = new Accelerometer();

public Start()
{

    InitializeComponent();
    acc.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(acc_ReadingChanged);
    acc.Start();
}

void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
}

void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)
{
    xText.Text = e.X.ToString("0.0000");
    yText.Text = e.Y.ToString("0.0000");
    zText.Text = e.Z.ToString("0.0000");
}

以下是 Settings.xaml.cs

的代码
Accelerometer acc = new Accelerometer();

private void Calib_Click(object sender, RoutedEventArgs e)
{
    acc.Start();
    acc.ReadingChanged += myAccelerometer_ReadingChanged;
}

void myAccelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs f)
{
    this.Dispatcher.BeginInvoke(delegate()
    {
        xBlock.Text = "X:"+f.X.ToString("0.0000");
        yBlock.Text = "Y:"+f.Y.ToString("0.0000");
        zBlock.Text = "Z:"+f.Z.ToString("0.0000");
        acc.Stop();
    });
}

2 个答案:

答案 0 :(得分:0)

设置页面应设置主页面和设置页面都可以访问的“全局”类的成员。有关如何执行此操作的信息,请参阅此question

理想情况下,这个类只会保存加速计类型信息。

答案 1 :(得分:0)

您还可以使用NavigationService将加速计数据发送到不同的页面。这可用于在页面之间发送简单数据。

// In your settings page use the following code
NavigationService.Navigate(new Uri(string.format("/Start.xaml?xValue={0}&yValue={1}&zValue={2}", xBlock.Text, yBlock.Text, zBlock.Text), UriKind.Relative));

然后在Start.xaml.cs中将以下代码添加到OnNavigatedTo方法中以读取数据

   protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        string x = "";
        string y = "";
        string z = "";

        NavigationContext.QueryString.TryGetValue("xValue", out x);
        NavigationContext.QueryString.TryGetValue("yValue", out y);
        NavigationContext.QueryString.TryGetValue("zValue", out z);
       // Then what ever you want to do with x,y and z value
    }

有关在页面之间传递数据的更多信息: - Passing parameters between pages, Windows phone 8