|
// Copyright (c) 2010
// by OpenLight Group
// http://openlightgroup.net/
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions
// of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
//
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Data;
using System.ComponentModel;
using System.IO;
using System.Windows.Input;
using System.Windows;
namespace SimpleMVVMFileUpload
{
public class ADefUploadControlViewModel : INotifyPropertyChanged
{
public Uri UploadUrl { get; set; }
public ADefUploadControlViewModel()
{
// Set the command property
UploadFileCommand = new DelegateCommand(UploadFile, CanUploadFile);
}
// Commands
#region UploadFileCommand
public ICommand UploadFileCommand { get; set; }
public void UploadFile(object param)
{
// Can only upload if there is a selected File
if (SelectedFileProperty != null)
{
// Turn on Uploading Flag
Uploading = true;
UploadFile();
}
}
private bool CanUploadFile(object param)
{
// Only allow uploading if not already uploading
return (Uploading != true);
}
#endregion
// Properties
#region Uploading
private bool _Uploading = false;
public bool Uploading
{
get
{
return _Uploading;
}
set
{
if (Uploading == value)
{
return;
}
_Uploading = value;
this.NotifyPropertyChanged("Uploading");
}
}
#endregion
#region SelectedFileProperty
private FileInfo _SelectedFileProperty;
public FileInfo SelectedFileProperty
{
get
{
return _SelectedFileProperty;
}
set
{
if (SelectedFileProperty == value)
{
return;
}
_SelectedFileProperty = value;
this.NotifyPropertyChanged("SelectedFileProperty");
}
}
#endregion
#region SelectedFileNameProperty
private string _SelectedFileNameProperty = "File Name";
public string SelectedFileNameProperty
{
get
{
return _SelectedFileNameProperty;
}
set
{
if (SelectedFileNameProperty == value)
{
return;
}
_SelectedFileNameProperty = value;
this.NotifyPropertyChanged("SelectedFileNameProperty");
}
}
#endregion
#region FileuploadPercentProperty
private string _FileuploadPercentProperty;
public string FileuploadPercentProperty
{
get
{
return string.Format("{0} %", this._FileuploadPercentProperty);
}
set
{
this._FileuploadPercentProperty = value;
this.NotifyPropertyChanged("FileuploadPercentProperty");
}
}
#endregion
#region MainViewModell_VM
private MainViewModel _MainViewModell_VM;
public MainViewModel MainViewModell_VM
{
get
{
return _MainViewModell_VM;
}
set
{
if (MainViewModell_VM == value)
{
return;
}
_MainViewModell_VM = value;
this.NotifyPropertyChanged("MainViewModell_VM");
}
}
#endregion
// Upload File
#region UploadFile
private void UploadFile()
{
// If there is a file upload it
if (SelectedFileProperty != null)
{
// Get the upload URL
string strURLWithSelectedFolder = string.Format("{0}", GetWebserviceAddress());
Uri uri = new Uri(strURLWithSelectedFolder, UriKind.Absolute);
UploadUrl = uri;
// Create an FileUpload object
FileUpload upload = new FileUpload(App.Current.RootVisual.Dispatcher, UploadUrl, SelectedFileProperty);
upload.ChunkSize = 4194304;
// Wire up handles for status changed and upload percentage
// These will be updating the properties that the ViewModel exposes
upload.StatusChanged += new EventHandler(upload_StatusChanged);
upload.UploadProgressChanged += new ProgressChangedEvent(upload_UploadProgressChanged);
// Start the Upload
upload.Upload();
}
}
#endregion
// Uploading Events
#region upload_UploadProgressChanged
void upload_UploadProgressChanged(object sender, UploadProgressChangedEventArgs args)
{
// Update the progress percentage
FileuploadPercentProperty = args.ProgressPercentage.ToString();
}
#endregion
#region upload_StatusChanged
void upload_StatusChanged(object sender, EventArgs e)
{
FileUpload fu = sender as FileUpload;
// Is upload complete?
if (fu.Status == FileUploadStatus.Complete)
{
// Clear the Selected File
SelectedFileProperty = null;
// Turn off Uploading Flag
Uploading = false;
// Refresh Files on the Main page
MainViewModell_VM.GetFilesCommand.Execute(null);
}
}
#endregion
// Utility
#region GetWebserviceAddress
private string GetWebserviceAddress()
{
string strXapFile = @"/ClientBin/SimpleMVVMFileUpload.xap";
string strBaseWebAddress =
App.Current.Host.Source.AbsoluteUri.Replace(strXapFile, "");
return string.Format(@"{0}/{1}", strBaseWebAddress, @"WebService/FileUpload.ashx");
}
#endregion
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.