培训第五章 数据存储 网络 推送 数据存储 临时数据存储 每一个页面都有一个状态字典 用来存储页面的临时数据 定义在PhoneApplicationPage中 每一个程序都有一个状态字典 存储程序的一些状态, 定义在PhoneApplicationService 持久数据存储 持入数据存储介绍 IsolatedStorageSettings IsolatedStorageSettings在独立存储中 Dictionary<TKey,TValue> 使用步骤: 1: 获取一个IsolatedStoragedSettings实例 IsolatedStoragedSettings MySetting = IsolatedStorageSettings.ApplicationSettings; 2: MySetting["name"] = this.name.Text; MySetting.Save(); 3: 读取数据 name.Text = MySetting["name"] as string; age.Text = MySetting["age"] as string; IsolatedStorageFile 表示包含文件和目录 涉及到的一些其它类 StreamWriter---写入 StreamReader---读取 DataContext(本地数据库) Windows Phone中使用的数据库为SQL Linq DataContext代表一个数据库对象 使用LinQ to Sql进行数据的存储和访问 数据库的操作 创建数据库 插入,查询,更新,删除 拷贝工程中的文件至独立存储 其它 网络 推送 培训第八章 依赖属性 数据绑定 依赖属性 依赖属性的引入 依赖属性的定义和使用 附加属性 IS DP AddOwner Canvas.Left/Grid.Row等 属性继承 绑定 绑定介绍 含义:一种与数据进行交互的简单方法 涉及到四个内容 绑定源 绑定目标 绑定对象 转换器 数据流向 绑定有Mode属性,它决定了数据的流向 OneTime OneWay TwoWay ElementName和绑定路径 ElementName binding 通过ElementName指定绑定数据 Path Variant 绑定到绑定源的某个属性 Source绑定 DataContext绑定 定义在FrameworkElement 可以动态改变DataContent 绑定转换器 属性改变通知
<!-- LayoutRoot 是包含所有页面内容的根网格 --> <Grid x:Name="LayoutRoot" Background="Transparent"> <!-- 效果没有显示出来 --> <!-- <Slider Margin="0,0,0,369" FontSize="30" Foreground="Red" Maximum="100" Value="30" /> <TextBlock Margin="10,216,-10,324" FontSize="30" Text="{Binding ElementName=slider, Path=Value, Converter={StaticResource DataConverter1}, ConverterParameter='1'}" /> <TextBlock Margin="10,307,-10,233" FontSize="30" Text="{Binding ElementName=slider, Path=Value, Converter={StaticResource DataConverter1}, ConverterParameter='2'}" /> --> <!-- <StackPanel x:Name="StackPanel1"> <TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Sex}" /> <TextBlock Text="{Binding Location}" /> </StackPanel> <Button HorizontalAlignment="Center" VerticalAlignment="Top" Click="Button_Click" Content="Next" /> --> <!-- <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Slider x:Name="slider1" Grid.Row="0" Maximum="100" Value="30" /> <TextBlock Grid.Row="1" Text="{Binding ElementName=slider1, Path=Value}" /> <StackPanel Grid.Row="2" Orientation="Horizontal"> <TextBox x:Name="myName" Width="200" Text="xxd" /> <TextBlock Text="Binding variant1:" /> <TextBlock Text="{Binding ElementName=myName, Path=Text}" /> </StackPanel> </Grid> --> <!-- <Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <TextBlock x:Name="textBlock1" Grid.Row="0" Text="To be BindTarget" /> <StackPanel Grid.Row="1" VerticalAlignment="Top" Orientation="Horizontal"> <Button x:Name="button1" Click="button1_Click" Content="Bind to Button1" Tag="tag1" /> <Button x:Name="button2" Click="button2_Click" Content="Bind to Button2" Tag="tag2" /> </StackPanel> </Grid> --> <!-- <Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"> <StackPanel> <TextBlock x:Name="textBlock1" Opacity="0" Text="Link To <a href="//Page1.xaml"> Page1 </a>" /> <local:RichTextBlock Foreground="Red" Text="{Binding ElementName=textBlock1, Path=Text}" /> </StackPanel> </Grid> --> <!-- <Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal"> <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Path=FontFamily}" /> <TextBlock Text=" - " /> <TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Path=FontSize}" /> <TextBlock Text=" pixels" /> </StackPanel> </Grid> --> <Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"> <StackPanel x:Name="stackPanel1"> <TextBlock Text="{Binding Name}" /> <TextBlock Text="{Binding Sex}" /> <TextBlock Text="{Binding Location}" /> <Button Click="Button_Click_1" Content="ChangeLocation" /> </StackPanel> </Grid> </Grid>
public partial class MainPage : PhoneApplicationPage { private List<Profile> profiles; private int index; private Profile profile1; // 构造函数 public MainPage() { InitializeComponent(); // 将 listbox 控件的数据上下文设置为示例数据 //DataContext = App.ViewModel; // 用于本地化 ApplicationBar 的示例代码 //BuildLocalizedApplicationBar(); //var binding = new System.Windows.Data.Binding() {ElementName = "slider1", Path = new PropertyPath("Value")}; //textBlock1.SetBinding(TextBlock.TextProperty, binding); //Profile profile1 = new Profile("Xlc","男","北京"); //StackPanel1.DataContext = profile1; /*profiles = new List<Profile>(); Profile profile0 = new Profile("xlc","男","男"); profiles.Add(profile0); profiles.Add(new Profile("xlc","男","北京")); profiles.Add(new Profile("xianglingchuan","女","四川")); index = 0; StackPanel1.DataContext = profile0;*/ profile1 = new Profile("Vincent","Male","Beijing"); stackPanel1.DataContext = profile1; } private void Button_Click_1(object sender, RoutedEventArgs e) { profile1.Location = "Heilongjiang"; profile1.MakeLocationChange(); } /*private void button1_Click(object sender, RoutedEventArgs e) { System.Windows.Data.Binding binding1 = new System.Windows.Data.Binding() { ElementName = "button1", Path = new PropertyPath("Content") }; textBlock1.SetBinding(TextBlock.TextProperty, binding1); } private void button2_Click(object sender, RoutedEventArgs e) { System.Windows.Data.Binding binding2 = new System.Windows.Data.Binding() { ElementName = "button2", Path = new PropertyPath("Content") }; textBlock1.SetBinding(TextBlock.TextProperty, binding2); }*/ // 为 ViewModel 项加载数据 protected override void OnNavigatedTo(NavigationEventArgs e) { } /*xprivate void Button_Click(object sender, RoutedEventArgs e) { index++; if (index >= profiles.Count) index = 0; StackPanel1.DataContext = profiles[index] as Profile; }*/ }