在另一页上读取变量集

时间:2011-11-11 04:39:26

标签: c# xaml windows-phone-7

我正在构建一个Windows手机应用程序,我需要一个设置页面。我想出了如何设置设置,但现在我需要知道如何从主页面阅读它们。

所以从MainPage.xaml.cs我需要在Settings.cs上检查ExitAlert是真还是假,我无法弄清楚如何。我确信这很简单。

感谢。

2 个答案:

答案 0 :(得分:2)

通常在Windows中临时设置(对于特定实例)存储在“PhoneApplicationService.Current.State”中 永久设置将存储在“System.IO.IsolatedStorage.IsolatedStorageSettings.ApplicationSettings”

根据您的查询

您可以将值存储在设置页面中,如下所示

if(PhoneApplicationService.Current.State.Contains("ExitAlert"))
    PhoneApplicationService.Current.State["ExitAlert"] = value;
else
    PhoneApplicationService.Current.State.Add("ExitAlert", value);  

您可以从主页面访问该值,如下所示

if(PhoneApplicationService.Current.State.Contains("ExitAlert"))
   value = (bool)PhoneApplicationService.Current.State["ExitAlert"];

if(value == true)
   Messagebox.Show("Exit alert is set");

希望它能解决你的问题。

答案 1 :(得分:0)

要在应用程序实例中的页面之间共享值,请将值添加到生成页面中的应用程序资源,并从另一个资源中获取值。

以下是我经常使用的一些帮助方法,它们说明了如何使用应用程序资源。

public static T GetResource<T>( object key ) where T : class
{
  return Application.Current.Resources[ key ] as T;
}

public static T GetResourceValueType<T>( object key ) where T : struct
{
  object value = Application.Current.Resources[ key ];
  return (value != null)
    ? (T)value
    : new T();
}

public static void SetResource( object key, object resource )
{
  if ( Application.Current.Resources.Contains( key ) )
    Application.Current.Resources.Remove( key );

  Application.Current.Resources.Add( key, resource );
}

请注意,SetResource解决了以下事实:一旦设置了应用程序资源,就无法更改它的值,因此它会删除旧资源,然后添加一个新资源。 GetResource和GetResourceValueType之间的区别在于类型是CLR资源类型(即类)还是CLR值类型(即结构,如int或bool)。

对于您的示例,您可以像这样使用它们:

bool exitAlert_Page1 = true;
SetResource( "ExitAlert", exitAlert );

// elsewhere...
bool exitAlert_Page2 = GetResourceValueType<bool>( "ExitAlert" );

我通常使用这些辅助方法来实现C#属性的get和set方法,即使用的'key'值仅限于属性定义。

更新:由于之前出现过这种情况,我在博文http://www.visualstuart.net/blog2/2011/11/sharing-values-across-wp7-pages/中将其包含在内,并提供了一些小改进和可下载的代码。享受!