wp8.1 C#技巧: Data和ViewModel类编写
在Data.cs
- namespace PicApp
- {
- [DataContract]
- class DataItem : PropertyChangeNotification
- {
- public event PropertyChangedEventHandler PropertyChanged;
- [DataMember]
- public int Id
- {
- get
- {
- return (this.id);
- }
- set
- {
- base.SetProperty(ref this.id, value);
- }
- }
- [DataMember]
- public Uri ImageUri
- {
- get
- {
- return (this.imageUri);
- }
- set
- {
- base.SetProperty(ref this.imageUri, value);
- }
- }
- [DataMember]
- public string Title
- {
- get
- {
- return (this.title);
- }
- set
- {
- base.SetProperty(ref this.title, value);
- }
- }
- int id;
- Uri imageUri;
- string title;
- }
- // trying to keep this as simple, static and out of the way as possible.
- static class Data
- {
- static List<DataItem> dataItems;
- public static async Task<IList<DataItem>> GetItemsAsync()
- {
- if (dataItems == null)
- {
- var localFolder = ApplicationData.Current.LocalFolder;
- try
- {
- var file = await localFolder.GetFileAsync(FILENAME);
- using (Stream netStream = await file.OpenStreamForReadAsync())
- {
- DataContractSerializer serializer = new DataContractSerializer(typeof(List<DataItem>));
- dataItems = (List<DataItem>)serializer.ReadObject(netStream);
- }
- }
- catch (FileNotFoundException)
- {
- }
- if (dataItems == null)
- {
- dataItems = await BuildDataFromPackageAsync();
- }
- }
- return (dataItems);
- }
- public static async Task SaveItemsAsync()
- {
- if (dataItems != null)
- {
- var localFolder = ApplicationData.Current.LocalFolder;
- var file = await localFolder.CreateFileAsync(FILENAME, CreationCollisionOption.ReplaceExisting);
- using (Stream netStream = await file.OpenStreamForWriteAsync())
- {
- DataContractSerializer serializer = new DataContractSerializer(typeof(List<DataItem>));
- serializer.WriteObject(netStream, dataItems);
- }
- }
- }
- static async Task<List<DataItem>> BuildDataFromPackageAsync()
- {
- var folder = await Package.Current.InstalledLocation.GetFolderAsync("Images");
- var files = await folder.GetFilesAsync();
- return (files.Select(
- (f,i) => new DataItem()
- {
- Id = i,
- ImageUri = new Uri(string.Format(URI_BASE_FORMAT_STRING, f.Name)),
- Title = f.Name
- }).ToList());
- }
- static readonly string URI_BASE_FORMAT_STRING = "ms-appx:///Images/{0}";
- static readonly string FILENAME = "pictures.xml";
- }
- }
在ViewModel.cs
- namespace PicApp
- {
- class ViewModel : PropertyChangeNotification
- {
- public ViewModel()
- {
- this.isReadVisible = true;
- }
- public DataItem DataItem
- {
- get
- {
- return (this.dataItem);
- }
- set
- {
- base.SetProperty(ref this.dataItem, value);
- this.titleCopy = this.dataItem.Title;
- }
- }
- public void ConfirmTitleChanges()
- {
- this.titleCopy = this.dataItem.Title;
- }
- public void RevertTitleChanges()
- {
- this.dataItem.Title = this.titleCopy;
- }
- public void SetReadMode()
- {
- this.isReadVisible = true;
- this.RaiseVisibilityChanges();
- }
- public void SetEditMode()
- {
- this.isReadVisible = false;
- this.RaiseVisibilityChanges();
- }
- void RaiseVisibilityChanges()
- {
- base.OnPropertyChanged("IsReadVisible");
- base.OnPropertyChanged("IsEditVisible");
- }
- public Visibility IsReadVisible
- {
- get
- {
- return (BoolToVisibility(this.isReadVisible));
- }
- }
- public Visibility IsEditVisible
- {
- get
- {
- return (BoolToVisibility(!this.isReadVisible));
- }
- }
- public bool IsEditing
- {
- get
- {
- return (!this.isReadVisible);
- }
- }
- static Visibility BoolToVisibility(bool value)
- {
- return (value ? Visibility.Visible : Visibility.Collapsed);
- }
- string titleCopy;
- DataItem dataItem;
- bool isReadVisible;
- }
- }
wp8.1 C#技巧: Data和ViewModel类编写的更多相关文章
- WP8.1 Study5:Data binding数据绑定
一.数据绑定 最简单的编程UI控件的方法是写自己的数据来获取和设置控件的属性,e.g. , textBox1.Text = "Hello, world"; 但在复杂的应用程序,这样 ...
- 设计模式之美:Private Class Data(私有类数据)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):实现对初始化数据的封装. 意图 封装类的初始化数据,控制对类的属性的更改,并保持类数据与使用数据的方法间的隔离. Encapsulate ...
- C# 利用MS的 EntLib的Database类编写的DbHelper
C# 利用MS的 EntLib的Database类编写的DbHelper,由于MS的EntLib对Oracle.SQL Server和MySql已经封装,所以可以该DbHelper可以适用这三种数据库 ...
- IntelliJ IDEA 2017版 SpringBoot测试类编写
SpringBoot的测试类编写Demo 源码见 https://github.com/liushaoye/baseone.git
- [深入浅出WP8.1(Runtime)]网络编程之HttpClient类
12.2 网络编程之HttpClient类 除了可以使用HttpWebRequest类来实现HTTP网络请求之外,我们还可以使用HttpClient类来实现.对于基本的请求操作,HttpClient类 ...
- WP8解析JSON格式(使用DataContractJsonSerializer类)(推荐)
DataContractJsonSerializer是.NET自带的类,在解析JSON格式的时候使用起来方便快捷,至于生成方面由于暂时没用到就没去看了.使用需要引用System.Runtime.Ser ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- wp8.1 C#技巧: 计时器
public MainPage() { this.InitializeComponent(); this.timer = new DispatcherTimer();//新建委托时间实例 timer. ...
- Zabbix实战-简易教程--技巧一(操作类技巧)
一.常用操作技巧 1.克隆 监控项.模板.触发器都可以进行克隆.其中,模板克隆又分为克隆和完全克隆.完全克隆会将LLD也一起复制一份,就是和之前的模板一模一样,而模板的克隆只是克隆监控项,不复制低层次 ...
随机推荐
- 转:浅谈C/C++中的指针和数组(一)
再次读的时候实践了一下代码,结果和原文不一致 error C2372: 'p' : redefinition; different types of indirection 不同类型的间接寻址 /// ...
- Hbase之批量删除数据
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- graph-tool文档(一)- 快速开始使用Graph-tool - 1.创建和操纵图
目录: 快速开始使用graph-tool 创建和操纵图 -- 遍历顶点和边 ----- 遍历所有顶点或边 ----- 遍历一个顶点的neighbourhood 名词解释: instante:实例 di ...
- 【转】Android设置虚线、圆角、渐变
Android虚线圆角渐变 有图又真相,先上图再说. 点击效果: 设置虚线: <?xml version="1.0" encoding="utf-8" ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...
- js中event.target,this
event.target这是注册事件时的对象,或者它的子元素.通常用于比较 event.target 和 this 来确定事件是不是由于冒泡而触发的.经常用于事件冒泡时处理事件委托. 1.this和e ...
- [saiku] 集成单点登录
思路: 自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作. 当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了. ...
- VS2012外接程序VMDebugger未能加载或导致了异常
转http://blog.csdn.net/maryhuan/article/details/42676915 故障现象:打开Visual Studio 2010后弹出错误框,外接程序VMDebugg ...
- MySQL 存储php中json_encode格式中文问题及解决
MySQL 存储php中json_encode格式信息 ,遇到中文时, 会变成一堆类似uxxxx信息. 1. 原因分析:在存储到数据库时!MySQL 不会存储 unicode 字符: MySQL 仅 ...
- hdu 3172 Virtual Friends (映射并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...