From 1c036de8e527038f00b7ff07fc1ef4b80f23a846 Mon Sep 17 00:00:00 2001 From: Ian C Date: Wed, 27 Jun 2012 17:22:49 +0000 Subject: Started trying to add dependency objects. Don't work yet. --- .../ViewModels/FileDialogViewModel.cs | 159 +++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs (limited to 'Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs') diff --git a/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs b/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs new file mode 100644 index 0000000..afc8e63 --- /dev/null +++ b/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs @@ -0,0 +1,159 @@ +// This file is part of the Noddybox.WindowsPhone C# suite. +// +// Noddybox.Emulation is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Noddybox.Emulation is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Noddybox.Emulation. If not, see . +// +// Copyright (c) 2012 Ian Cowburn +// +using System; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Collections.Generic; + +namespace Noddybox.WindowsPhone.Silverlight.ViewModels +{ + /// + /// Provides a common view model for all file dialogs. + /// + public class FileDialogViewModel : BaseViewModel + { + #region Private data + + private string filename; + private string path; + private List fileList; + + #endregion + + #region Private members + + private void GetFileList() + { + FileList = FileInfo.GetFiles(path); + } + + #endregion + + #region Bindable properties + + /// + /// Get/set the filename. + /// + public string Filename + { + get {return filename;} + set {SetValue(ref filename, value, "Filename", "IsFileSelected");} + } + + /// + /// Get whether there is a filename. + /// + public bool IsFileSelected + { + get {return !String.IsNullOrWhiteSpace(filename);} + } + + + /// + /// Get the list of files. + /// + public List FileList + { + get {return fileList;} + set {SetValue(ref fileList, value, "FileList"); } + } + + /// + /// Get/set the current path. + /// + public string Path + { + get {return path;} + set + { + SetValue(ref path, value, "Path"); + Filename = String.Empty; + GetFileList(); + } + } + + #endregion + + #region Public members + + /// + /// Called when a file is selected. + /// + /// The selected file. + public void FileSelected(FileInfo file) + { + if (file.IsFolder) + { + string newPath = path; + + if (file.Name != "..") + { + newPath += file.Name + "/"; + } + else + { + if (newPath.Length > 1) + { + string[] parts = newPath.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries); + + newPath = "/"; + + for(int f = 0; f < parts.Length-1; f++) + { + newPath += parts[f] + "/"; + } + } + else + { + newPath = "/"; + } + } + + Path = newPath; + } + else + { + Filename = file.Name; + } + } + + #endregion + + #region Constructors + + /// + /// Construct the view model. + /// + /// The path to start selecting from. + public FileDialogViewModel(string startPath) + { + path = startPath; + Filename = String.Empty; + GetFileList(); + } + + #endregion + } +} -- cgit v1.2.3