MetroZip App for Windows Store – Release 1

MetroZip
E’ ufficialmente nello store la nuova App MetroZip, l’Applicazione che vi permette di create e gestire i vostri archivi compressi in formato zip con tutta comodità.

Quali sono le nuove funzionalità? MetroZip consentirà di:
– creare un nuovo archivio in formato zip
– aprire un archivio zip
– aggiungere files o folders ad un archivio esistente
– condividere via email o in cloud un archivio
– aprire in preview un file presente in un archivio
– estrarre il conteuto di un arichivio compresso

Ecco il link: http://apps.microsoft.com/webpdp/it-IT/app/metrozipfiles/4c7f9047-e2f4-4a4e-83ae-668ba65ae8f1

Maurizio


MetroNote App for Windows Store – Release 2

MetroNote App for Windows 8 Store
E’ ufficialmente pubblicata la nuova major release di MetroNote, l’Applicazione che permette la completa gestione dei vostri Post-it/Memo che ora è diventata GRATUITA.

Quali sono le nuove funzionalità? MetroNote consentirà di:
– cambiare tema (“metal” o “wood”) dello sfondo
– cambiare il colore delle note
– inserire un mark sulle note più importanti
– condividere le note tramite la Share Charm
– aggiungere le note alla Start
… e altro ancora! Aspettate e vedrete!

Ecco il link per vederla sul Windows Store: MetroNote

Maurizio


Unable to activate Windows Store app: The App.exe process started, but the activation request failed with error ‘The app didn’t start.

Hi,
if you happen at least once to receive this unpleasant message:

“Unable to activate Windows Store app: The App.exe process started, but the activation request failed with error ‘The app didn’t start.

that not allows you to start the Store App, here the possible causes:

1) Download assemblies via Nuget
Nuget in the Windows Store Apps will try to add an app.config in the project, but Windows Store Apps don’t need App.Config.

Solution
Remove App.Config and Deploy App.

2) Change the Package Name in the manifest

Solution
Uninstall App from the Start Screen, delete bin/obj folder and files and then Deploy App.

3) In All other cases

Solution
Uninstall App from the Start Screen, delete bin/obj folder and files and then Deploy App.

Enjoy
Maurizio


Windows 8 Design Templates Reference

Hi,
Good news to all the developers!!

Now to help you in Designing the Windows 8 Apps.
Here are the Design Templates which you can use: There are total of 55 templates.

Complete list here Windows 8 Apps Templates

MSDN Preview Templates: MSDN Preview Templates

Enjoy
Maurizio


Adding SettingsData support to ViewModel with MVVM Light in WinRT

In the previous Post, I have spoken about a solution for DialogMessaging service. Now I would you like propose another solution for read and write data from the LocalSettings or RoamingSettings using IOC design pattern and MVVM Light toolkit.

So, Let’s start with the definition of an Interface that allows the support to the Local/Remote Settings.

	
public interface ISettingsDataService
{
	T GetItem<T>(string container, string id);

	IEnumerable GetItems<T>(string container);

	void SetValue<T>(string container, string id, T data);

	IEnumerable GetEntities<T>(string container)
		where T: new()

	void SetEntity<T>(string conatiner, T entity)
		where T: new()		
}

Now we have to move to the implementation:

public class SettingsDataService: ISettingsDataService
{
	private ApplicationDataContainer settingsContainer;

	public SettingsStoreService(ApplicationDataContainer applicationDataContainer) 
	{
		this.settingsContainer = applicationDataContainer; 
	}	 

	public T GetItem<T>(string container, string id)
	{
		if (container == null)
			throw new ArgumentNullException("Container cannot be null.");

		if (id == null)
			throw new ArgumentNullException("Id cannot be null");

		ApplicationDataContainer dataContainer = 
				settingsContainer.CreateContainer(container, ApplicationDataCreateDisposition.Always);

		var value = dataContainer.Values.ContainsKey(id)? dataContainer.Values[id]: null;
		if (value == null) return default(T);
		return (T)value;
	}

	public IEnumerable GetItems<T>(string container) 
	{
		if (container == null)
			throw new ArgumentNullException("Container cannot be null");

		ApplicationDataContainer dataContainer = 
			settingsContainer.CreateContainer(container, ApplicationDataCreateDisposition.Always);

		var values = new List();
		foreach (var value in dataContainer.Values)
			values.Add((T)value.Value);
		return values;
	}

	public IEnumerable GetEntities<T>(string container) where T : new()
	{
		if (container == null) 
		throw new ArgumentNullException("Container cannot be null");

		ApplicationDataContainer dataContainer = 
		settingsContainer.CreateContainer(container, ApplicationDataCreateDisposition.Always);

		var values = new List();	 
		foreach (var compositeValue in dataContainer.Values)
		{
			var entity = CreateEntity((ApplicationDataCompositeValue)compositeValue.Value);
			values.Add(entity);
		}
		return values;	 
	}

	public void SetValue<T>(string container, string id, T value)
	{	 
		if (container == null)
			throw new ArgumentNullException("Container cannot be null");

		if (string.IsNullOrEmpty(id)) 
			throw new ArgumentNullException("Id cannot be null");

		if (value == null)
			throw new ArgumentNullException("Value cannot be null");

		ApplicationDataContainer dataContainer = 
			settingsContainer.CreateContainer(container, ApplicationDataCreateDisposition.Always);
		dataContainer.Values[id] = value;	 
	}

	public void SetEntity<T>(string container, string id, T value) where T : new()
	{
		if (container == null)	 
			throw new ArgumentNullException("Container cannot be null");

		if (string.IsNullOrEmpty(id)) 
			throw new ArgumentNullException("Id cannot be null");

		if (value == null)		 
			throw new ArgumentNullException("Value cannot be null");

		ApplicationDataContainer dataContainer = 
			settingsContainer.CreateContainer(container, ApplicationDataCreateDisposition.Always);

		ApplicationDataCompositeValue compositeValue = GetCompositeValue(value); 
		dataContainer.Values[id] = compositeValue;	 
	} 

	private T CreateEntity<T>(ApplicationDataCompositeValue compositeValue) 
		where T : new()
	{
		var entity = new T(); 
		if (entity != null) 
		{ 
			foreach (var keyValue in compositeValue)
				entity.GetType().GetRuntimeProperty(keyValue.Key).SetValue(entity, keyValue.Value);

		} 
		return entity;	 
	}

	private ApplicationDataCompositeValue GetCompositeValue(object entity)
	{
		var compositeValue = new ApplicationDataCompositeValue();
		var entitySerializable = entity.GetType()
									   .GetRuntimeProperties()
									   .Where(p => p.PropertyType.GetTypeInfo()
									   .IsSerializable
		foreach (var property in entitySerializable))
			compositeValue[property.Name] = entity.GetType().GetRuntimeProperty(property.Name).GetValue(entity);
		return compositeValue; 
	}  
}

And then, we need to register this service when the app starts.
So, define the following method in the ViewModelLocator class:

public class ViewModelLocator
{
	public ViewModelLocator()
	{
		 ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
		 if (!ViewModelBase.IsInDesignModeStatic)
		 { 
			Registers();
		 } 
	}

	public void Registers()
	{
		SimpleIoc.Default.Register(() => new SettingsDataService(ApplicationData.Current.LocalSettings));
	}
}

In the viewmodel, where we need the SettingsDataService we use dependency injection in this way:

public class MainViewModel: ViewModelBase
{
	public MainViewModel(ISettingsDataService settingsDataService)
	{
		//Get a simple value from the LocalStore using ISettingsDataService
		var title = settingsDataService.GetItem<string>("ContainerStoreApp", "TitleApp");

		//Set a simple Entity
		MyClass c = new MyClass();
		c.MyProperty = "MyValue";
		c.MyComplexProperty = "MyComplexProperty";

		settingsDataService.SetEntity<MyClass>("ContainerStoreApp", c);
	}
}

In this way we are able to interact with the SettingsData using IOC and MVVM Light.

Enjoy
Maurizio


Adding DialogMessaging support to ViewModel with MVVM Light in WinRT

In this post I would like to propose a simple solution for DialogMessaging on the UI using MVVM Light Toolkit.

The idea is to use the power of IOC pattern included in the MVVM Light Tookit available free from NuGet.

First of all we need an Interface that allows to define the support to DialogMessaging.
Here an example:

public interface IDialogMessageService
{
	Task ShowAsync(string title, string message);	

	Task ShowAsync(string title, string message, IEnumerable commands);
}

Now we have to move to the implementation:

public class DialogMessageService: IDialogMessageService
{
	public async Task ShowAsync(string title, string message)
	{
		await ShowAsync(title, message, null);
	}

	public async Task ShowAsync(string title, string message, IEnumerable commands)
	{
		var messageDialog = new MessageDialog(message, title);
		if(commands != null)
		{
			foreach(var command in commands)
				messageDialog.Commands(command);
		}
		await messageDialog.ShowAsync();
	}	
}

And then, we need to register this service when the app starts.

So, define the following method in the ViewModelLocator class:

public class ViewModelLocator
{
	public ViewModelLocator()
	{
	     ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
             if (!ViewModelBase.IsInDesignModeStatic)
             { 
		 Registers();
             } 
        }

	public void Registers()
	{
		SimpleIoc.Default.Register<IDialogMessageService, DialogMessageService>();
	}
}

In the viewmodel, where we need the DialogMessageService we use dependency injection in this way:

public class MainViewModel: ViewModelBase
{
	public ICommand ShowMessageCommand{ get; private set;}

	public MainViewModel(IDialogMessageService dialogMessageService)
	{		
		this.ShowMessageCommand = new RelayCommand( async() => 
		{
			await dialogMessageService.ShowAsync("Title", "Hello", null);	
		});
	}
}

And at the end we can use the communication from View - ViewModel with MVVM Design Pattern simply. :)

Enjoy
Maurizio

70-485 Advanced Windows Store App Development Using C#

Hi,
2 day ago, i have just passed exam 70-485 Advanced Windows Store Development Using C#, last step to archieve credit MCSD Windows Store Apps Using C#.

For this exam should have a minimum of experience on developing Windows-based applications, including a minimun of experience developing applications for a touch-enabled interface/platform.

Main topic arguments:

  • Experience designing and developing the Process Lifetime Management (PLM) for Windows Store apps
  • Experience managing and securing app data for a Windows Store solution
  • Experience planning and designing user interaction solutions based on requirements
  • Experience with the full development life cycle of Windows Store apps
  • Experience designing and developing asynchronous solutions
  • Experience creating apps that conform to the Windows Store app guidelines

The exam includes 45/46 questions between drap-drop, multiple, single response, my general opinion this exam is not easy, should be prepared for achievement goal.

See you ….
Maurizio


70-484 Essentials of Developing Windows Store Apps Using C#

Hi,
2 day ago, i have just passed exam 70-484 Essentials of Developing Windows Store Apps Using C#, second step to archieve credit MCSD Windows Store Apps Using C#.

For this exam should have a minimum of experience on developing Windows-based applications, including a minimun of experience on developing applications for a touch-enabled interface/platform.
Main topic arguments:

  • Experience designing and developing Windows Store apps that access local and remote data and services, including Windows Azure
  • Experience designing the various layers of an app for separation of concerns
  • Experience planning and designing user interaction solutions based on requirements
  • Experience designing and developing asynchronous solutions
  • Experience creating apps that conform to the Windows Store app guidelines

The exam includes 40 questions between drap-drop, multiple, single response.

Bye Bye
Maurizio


70-483 – Programming C#

hi,
today i have just passed exam 70-483 Programming C#, first step to archieve credit MCSD Windows Store Apps.
The exam is very very simple, it is enough to be have 1 or more year of experience in C# and .NET Framework.

70-483 Microsoft Course http://www.microsoft.com/learning/en/us/course.aspx?ID=20483B#fbid=wKQOpO0Tj7p

The most common questions are on topics such as:
– linq operator  – delegate
– performance counter
– extention methods
– accessor level
– use of generics
– class definition

The next step is “Essential of Developing Windows Store Apps using C#;)

See you at the nest post …
Maurizio


Analytics Tools for Windows Store Apps – XAML

segnalo due potenti strumenti per fare Analitics/Performance delle App per Windows Store.

- http://www.distimo.com
tra le svariate funzionalità a disposizione della piattaforma, abbiamo una comoda dashboard completamente configurabile che ci permete di misurare l’andamento di mercato delle App per diversi store (ma a io importa Windows Store) … :)
 
- https://developer.omniture.com/en_US/content_page/mobile/c-measuring-mobile-applications
 qui invece il focus si sposta maggiormente sull’analisi delle performance del software.  OnLine è disponibile l’SDK e un Quick Start su come utilizzare al meglio le API.

Enjoy!

Maurizio


Using Bing SDK in Windows 8 Metro Apps

Vediamo come possiamo utilizzare Bing SDK nelle nostre Metro Style Apps.

Inanzitutto dobbiamo scaricare dal sito Microsoft il package Bing Maps SDK for Windows Store apps a questo indirizzo:  http://visualstudiogallery.msdn.microsoft.com/bb764f67-6b2c-4e14-b2d3-17477ae1eaca, dove troviamo anche alcune indicazioni per noi sviluppatori.

Una volta scaricato/installato il package lo dobbiamo aggiungere come Reference alla nostra applicazione, a questo punto se siamo sviluppatori C# o VB.NET ci manca ancora un requisito obbligatorio, cioè: Microsoft C++ Runtime Package.

Bene, ora che abbiamo tutti gli strumenti che ci servono per sviluppare ci manca ancora il Map Developer Account che possiamo creare sul sito http://www.bingmapsportal.com/.

Qui possiamo accedere con il nostro LiveId così da creare una SecretKey (che ci servira dopo per usufruire del servizio) associata alla nostra App:

Ecco qui una screenshot:

Ora possiammo vedere qualche esempio di codice

Per iniziare dobbiamo mettere come resource la SecretKey così che sia sempre disponibile nella nostra App (possiamo usare il App.xaml):

Adesso non ci rimane che mettere il controllo Map via XAML in questo modo:

L’App di esempio che ho fatto mette a disposizione quattro funzionalità nell’AppBar:

- ZoomIn (fattore di ingrandimento sulla mappa)
ZoomOut (fattore di ridimensionamento sulla mappa)
SetLocation (posizione attuale)
ChangeView  (cambio di vista)

Qui una screenshot completa:

Adesso vediamo il codice che serve per le funzionalità sopra alencate.

ZoomIn / ZoomOut

Per fare questo tipo di operazioni sulla mappa, molto semplicemente ci basta accedere all’oggetto mappa definito prima e impostare il nuovo ZoomLevel che ci interessa e successivamente fare un SetZoomLevel sulla mappa con il nuovo fattore di Zoom.

Ecco come:

Change Map Type

Per cambiare visualizzazione è sufficiente cambiare il valore l’enumerativa  MapType dell’oggetto Map impostato precedentemente.

Ecco un esempio:

Set Location

Per impostare la nostra posizione attuale sulla mappa dobbiare creare un’istanza dell’oggetto Geolocaltor e invocare il metodo async GetGeopositionAsync che a sua volta ci restuirà indietro un oggetto GeoPosition con latitudine e longitudine.

Ora possiamo creare un oggetto Location date le coordinate appena recuperate e fare un SetView sull’oggetto Map creato in precedenza dove ci viene richiesto un oggetto Localtion e il fattore di Zoom che volgliamo.

Ecco un esempio:

Nell’esempio sopra ho aggiunto la possibilità tramite un Tap sulla mappa di impostare un pushpin (come memo.

Ecco il link per scaricare l’esempio.

Buon Divertimento

Maurizio


Using SQLite in Windows 8 Metro Style Apps

Con grande stupore, visto che all’uscita di Windows 8 non era previsto nessun supporto nativo per database, ora è finalmente disponibile una versione del noto database SQLite (precompiled) sia per WinRT che per Windows Phone 8.  :)

Da ora in poi saremo in grado di sviluppare applicazioni che possono condividere il layer di accesso ai dati basato su SQLite, quindi semplificare l’integrazione tra le due piattaforme: Windows 8 e Windows Phone 8.

Fatta questa premessa, vediamo i passi da seguire per poter integrare SQLite nelle nostre Windows 8 Apps.

Di cosa abbiamo bisogno?

Inanzitutto dobbiamo andare sul sito ufficiale www.sqlite.org alla sezione download scaricare il package per WinRT che si chiama Precompiled Binaries for Windows Runtime ed eseguire l’installazione.

Una volta completata la fase d’installazione possiamo aprire la nostra Windows 8 App e aggiungere la reference al progetto.
Ecco la screenshot:

SQLite ReferenceSe, a questo punto, la nostra applicazione non dovesse compilare, sarebbe dovuto dal fatto che essendo SQLite una libreria di codice nativo dobbiamo impostare dal Configuration Manager di Visual Studio x86 o x64 (e non AnyCPU)  non essendo ancora supportato ARM.


Adesso non ci rimane che scaricare tramite NuGet una libreria chiamata sqlite-net che ci semplifica la vita e fornisce il supporto LINQ per lavorare con i dati e il supporto all’async pattern.
NuGet scaricarà nella root del nostro progetto 2 files: SQLite.cs (supporto sincrono) e SQLiteAsync.cs (supporto asincrono), che sono appunto le classi che ci vengono in supporto per lo sviluppo.

Ora scriviamo del codice:

In questo post vedremo come iniziare a usare SQLite in un App XAML / C#, come creare un database e eseguire delle operazioni CRUD sui dati.

Il primo passaggio è quello di creare un oggetto SQLiteAsyncConnection, o SQLiteConnection (per la versione sicnrona), che identifica la connessione al database.
Ecco un esempio di creazione Db Sincrona:

Ecco un esempio di Creazione Db Asyncrona:
Ora però ci serve almeno una tabella quindi definiamo una classe e andiamo a decorare le Proprietà in questo modo:

In questo esempio possiamo notare alcuni attributi utili per decorare in modoo opportuno la nostra classe:

- AutoIncrement: utile per dire a SQLite che quella colonna sarà un numero auto incrementato.
PrimaryKey: serve per identificare una colonna come chiave primaria.

Per creare la tabella appena definita chiamiamo il metodo CreateTableAsync <T>, o CreateTable<T> (per la versione sincrona), per ogni tabella che si desidera creare, dove T è il tipo di dati che andremo a riporre in essa.

Ora ci tocca inserire dei dati e per farlo possiamo usare il metodo InsertAsync, o Insert (nella versione sincrona), che accetta come parametro una istanza di oggetto che andremo a salvare… oppure possiamo usare, in caso di inserimento massivo, InsertAllAsync che accetta come parametro una istanza di un oggetto enumerabile.
Ecco un esempio della versione Asyncrona:
E qui la versione sincrona:

Come si può notare per la versione sincrona ho utilizzato il metodo RunInTransaction che ci permette di scrivere del codice safe e gestire al meglio i nostri dati.

Adesso non ci rimane altro che visualizzare i nostri dati appena inseriti: per farlo possiamo utilizzare il metodo Table<T> e chiamare successivamente  l’extentions ToListAsync (solo nella versione asincrona).
Ecco un esempio della versione asincrona:
E qui la versione sincrona:

….. e ora siamo pronti a integrare SQLite nelle nostre Windows 8 APP! :)

Enjoy!


Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 66 follower