
cobra
striver
-
个人空间
相册
- 性别:
- 来自:拼吾爱
- 积分:7097
- 帖子:7009
- 注册:
2007-04-09
|
在silverlight中使用IsolateStore隔离存储(上)
文/代震军 出处/博客园 隔离存储(Isolate Store) 是一个虚拟的文件系统 . 它可用于保存本地(客户端文件)。下面是微软的一些解释: 虚拟文件系统根目录对于每个机器当前登陆用户不同的, 它是一个隐藏的文件夹,存在于物理文件系统中. 每个 application的不同标识将会使其映射到不同的文件夹中, 也就是说,将分配给每个不同的application 一个属于它的 虚拟文件系统. .NET Framework version 2.0中的文件夹节构和隐藏架构同样在.NET Framework for Silverlight中 也用到了.
而在silverlight开发中,允许我们使用Isolate Store(位于System.IO.IsolatedStorage名空间),其下有几个 主要的类如: IsolatedStorageSettings (以Dictionary<<(TKey, TValue)>> 键值对的方式来存储数据,本文DEMO的演示内容) IsolatedStorageFile (返回一个包括路径和文件的虚拟区域, 用于管理目录,文件等, 会在下一篇中演示) IsolatedStorageFileStream (以流的方式读写指定路径的文件, 会在下一篇中演示) 下面就先演示一下IsolatedStorageSettings的使用方法: 假设我们有一个应用,它是一个本地邮件管理和发送程序(如OutLook等).而我们写完一封EMAIL时可能不会立即将 其发送出去,而是还生成一个Draft(草稿,以便日后进行编辑),当我们认为可以发送时才会去SEND。 下面就是这个应用的一个原型, 如下图:  附件: 您所在的用户组无法下载或查看附件 我们可以在输入了相关信息之后,先将其保存为草稿. 当我们下次再运行这个应用时,做自动加载当前的草稿, 以 便我们进行编辑操作.当工作完成之后,就可以将其发送到Server端. 如果认为内容不好,我们也可以从Isolate Store 区中将该项内容删除. 下面就是它的page.xaml代码:  Code
<Grid x:Name="LayoutRoot" Background="AliceBlue"> <Grid.RowDefinitions> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="231"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="122" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Margin="5,5,57,5" HorizontalAlignment="Stretch"> <Run Text="收件人:"/> </TextBlock> <TextBox x:Name="Recipient" Width="200" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Margin="5,5,0,5"/>
<TextBlock Grid.Row="1" Grid.Column="0" Margin="5,5,57,5" HorizontalAlignment="Stretch"> <Run Text="主 题:"/> </TextBlock> <TextBox x:Name="Subject" Width="200" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" Margin="5,5,0,5"/>
<TextBlock Grid.Row="2" Grid.Column="0" Margin="5,5,57,36" HorizontalAlignment="Stretch" > <Run Text="内 容:"/> </TextBlock> <TextBox x:Name="Body" TextWrapping="Wrap" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch" Margin="5,5,8,5" Grid.RowSpan="1"/> <StackPanel Grid.ColumnSpan="2" Grid.Row="3" Orientation="Horizontal" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="8,23.5,64,8"> <Button x:Name="SaveToDraft" Margin="5,5,5,5" Content=" 保存为草稿(本地) " Click="SaveToDraft_Click" /> <Button x:Name="SaveToServer" Margin="5,5,5,5" Content=" 上传到服务器 " Click="SaveToServer_Click"/> <Button x:Name="DeleteDraft" Margin="5,5,5,5" Content=" 删除当前草稿(本地) " Click="DeleteDraft_Click" /> </StackPanel> </Grid>
而相应的page.xaml.cs(位于源码包中的IsolatedStore_Demo文件夹)代码如下:  Code
public partial class Page : UserControl { private IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;//获取当前应用(silverlight Application) IsolatedStorageSettings 实例,范围在当前应用 //IsolatedStorageSettings appSettings = //IsolatedStorageSettings.SiteSettings;//获取当前应用(silverlight Application) IsolatedStorageSettings 实例,范围在当前域
public Page() { InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded); }
void Page_Loaded(object sender, RoutedEventArgs e) { try { //加载相应节点信息,首次运行时会报为空的错误 Recipient.Text = (string) appSettings["Recipient"]; Subject.Text = (string)appSettings["Subject"]; Body.Text = (string)appSettings["Body"]; } catch (System.Collections.Generic.KeyNotFoundException ex) { HtmlPage.Window.Alert(ex.Message); }
}
private void SaveToDraft_Click(object sender, RoutedEventArgs e) { try { //添加相应节点信息 appSettings.Add("Recipient", Recipient.Text); appSettings.Add("Subject", Subject.Text); appSettings.Add("Body", Body.Text); HtmlPage.Window.Alert("已存入本地隔离存储区"); } catch (ArgumentException ex) { HtmlPage.Window.Alert(ex.Message); } }
private void DeleteDraft_Click(object sender, RoutedEventArgs e) { try { //移除相当节点信息 appSettings.Remove("Recipient"); appSettings.Remove("Subject"); appSettings.Remove("Body"); HtmlPage.Window.Alert("已从本地隔离存储区中删除该草稿"); } catch (ArgumentException ex) { HtmlPage.Window.Alert(ex.Message); }
}
private void SaveToServer_Click(object sender, RoutedEventArgs e) { //创建EMAIL信息类,以此作为上传数据 EmailInfo emailInfo = new EmailInfo() { Recipientk__BackingField = Recipient.Text, Subjectk__BackingField = Subject.Text, Bodyk__BackingField = Body.Text };
EmailClient emailClient = new EmailClient(); //调用WCF方法 emailClient.AcceptCompleted += new EventHandler<AcceptCompletedEventArgs>(email_AcceptCompleted); emailClient.AcceptAsync(emailInfo); }
void email_AcceptCompleted(object sender, AcceptCompletedEventArgs e) { if (e.Result) { HtmlPage.Window.Alert("上传成功"); } else { HtmlPage.Window.Alert("上传失败"); } }
}
上面代码中就是将subject(主题),Recipient(收件人),Body(邮件内容)以键值对的方式存储在Isolate Store 虚拟存储区中.而相应的WCF服务这里只是一种象征性的发送,并无什么实质内容,它在调用成功后会将结果以Bool型传 递回来,以便进行接下来其它操作. 好了,今天的内容就到这里了:) 源代码下载链接,请点击这里:  附件: 您所在的用户组无法下载或查看附件| 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。 |
|