Windows开发应用(2)通过静态属性Properties来保存全局数据

在过去的WinForm开发或者WPF开发中,我们会考虑使用一个静态类或在某类中声明一些静态字段来保存全局数据,即在声明的时候加上static关键字

除了这种方法,今天,我们在Win8开发中,不妨用用这个类。

启动VS,打开“对象浏览器”,我们找到CoreApplication类,它位于Windows.ApplicationModel.Core命名空间。看图。

 

我在图上标注了,蓝色那圈圈,看到没?有个静态属性Properties,它其实就是一个字典结构。嗯,字典结构,应该懂了,就是一key一value那种。

现在就好办了,我们今天就是利用它来存储一些运行时信息,你可以把它看成是Asp.Net中的Session。

先简单这个示例是怎么玩的,玩法很简单,玩家一个,就你自己。

我们运行示例后,在第一个页面中分别输入两个值,然后把这两个值保存到CoreApplication.Properties字典中;

第二个页面和第三个页面分别取出这些值并显示出来。

为了能实现在同一个页面中查看多个视图,我在主页面中放一个Frame,再利用这个Frame来显示其它页面。主页的XAML如下。

 

 <!--Background 获取或设置一个用于填充面板的 Brush。 (继承自 Panel。)-->
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ListBox Grid.Column="0"  VerticalAlignment="Stretch" Width="200"
                 FontSize="28"
                 SelectionChanged="ListBox_SelectionChanged"
                 SelectionMode="Single">
            <ListBoxItem>页面一</ListBoxItem>
            <ListBoxItem>页面二</ListBoxItem>
            <ListBoxItem>页面三</ListBoxItem>
        </ListBox>
        <Frame x:Name="myFrame" Grid.Column="1"/>
    </Grid>

后台的C#代码就是根据ListBox中选择的页面来导航。

 
 private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ListBoxItem item = e.AddedItems[0] as ListBoxItem;
            if (item != null)
            {
                string str = item.Content as string;
                switch (str)
                {
                    case "页面一":
                        myFrame.Navigate(typeof(Page1));
                        break;
                    case "页面二":
                        myFrame.Navigate(typeof(Page2));
                        break;
                    case "页面三":
                        myFrame.Navigate(typeof(Page3));
                        break;
                    default:
                        break;
                }
            }
        }

下面,我们开始做第一个页面,就是用来输入数据并保存状态的。

项目--右键--添加--类--windows应用程序--空白页  即可

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" Margin="25" Text="第一个页面" Style="{StaticResource HeaderTextStyle}"/>

        <StackPanel Margin="15" Grid.Row="1">
            <TextBlock Text="在本页输入两个状态值,第一个状态在页面二中获取;第二个状态值在页面三中获取。" Style="{StaticResource GroupHeaderTextStyle}"/>
            <TextBlock Text="输入第一个状态值:" Margin="0,13,0,0" Style="{StaticResource BodyTextStyle}"/>
            <TextBox Name="txt1" Margin="5,10,0,0"/>
            <TextBlock Text="输入第二个状态值:" Margin="0,18,0,0" Style="{StaticResource BodyTextStyle}"/>
            <TextBox Name="txt2" Margin="5,10,0,0"/>
            <Button Margin="12,20,0,0" Width="220" Content="保存状态" Click="onSave"/>
        </StackPanel>
    </Grid>

 我们要处理保存按钮的单击事件。

 private void onSave(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txt1.Text)
                || string.IsNullOrWhiteSpace(txt2.Text))
            {
                return;
            }

            Windows.ApplicationModel.Core.CoreApplication.Properties["value1"] = txt1.Text;
            Windows.ApplicationModel.Core.CoreApplication.Properties["value2"] = txt2.Text;
        }

后面两个页面几乎一样,就是从第一个页面保存的状态中读取。

页面二-XAML

项目--右键--添加--类--windows应用程序--空白页  即可

   <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TextBlock Grid.Row="0" Margin="25" Text="第二个页面" Style="{StaticResource HeaderTextStyle}"/>

        <TextBlock Name="tb" FontSize="32" Margin="20,20,0,0" Grid.Row="1"/>
    </Grid>

页面二-C#

 protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (Windows.ApplicationModel.Core.CoreApplication.Properties.ContainsKey("value1"))
            {
                this.tb.Text = Windows.ApplicationModel.Core.CoreApplication.Properties["value1"] as string;
            }
        }

页面三-XAML

项目--右键--添加--类--windows应用程序--空白页  即可

   <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Margin="25" Text="第三个页面" Style="{StaticResource HeaderTextStyle}"/>
        <TextBlock Name="tb" Grid.Row="1" Margin="20,20,0,0" FontSize="32"/>
    </Grid>

页面三-C#

  protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (Windows.ApplicationModel.Core.CoreApplication.Properties.ContainsKey("value2"))
            {
                this.tb.Text = Windows.ApplicationModel.Core.CoreApplication.Properties["value2"] as string;
            }
        }

运行一下吧。首先,在主页左边的列表中选页面一,输入两个数据,记得点保存按钮。

接着分别转到页面二和页面三,看看页面中显示了结果没?

 


这个简单吧?当然,在测试中我们也发现了,当挂起后再回到程序,文本框中输入的内容不见了,但已经保存到CoreApplication.Properties到中的内容仍然可以读取。

当然了,如果你把应用程序退出了,自然保存的状态也会丢失。因此,如果在程序挂起后保留文本框中的数据,各位应该知道怎么做了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值