【问题标题】:Passing variable between XAML pages在 XAML 页面之间传递变量
【发布时间】:2014-03-11 23:31:59
【问题描述】:

我有两个页面:Start.xaml.cs 和 Settings.xaml.cs。 在 Setting.xaml.cs 中,我仅一次从加速度计中获取数据并修复了初始位置。在 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();
    });
}

【问题讨论】:

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


【解决方案1】:

您还可以使用 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

【讨论】:

  • 它可以工作,但我想将加速度计数据保存到 settings.xaml.cs 并且不直接导航到 start.xaml.cs。我想去像MainPage.xaml.cs这样的中间页面,然后去Start.xaml.cs。
  • 我想到了将数据传输到 MainPage.xaml.cs 并从那里传输到 Start.xaml.cs 或者它存在更简单的方法来执行此操作?
【解决方案2】:

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

理想情况下,此类仅保存加速度计类型信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多