在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;
    }
}

 

 posted on 2014-12-10 21:51  NEIL_X  阅读(346)  评论(0)    收藏  举报