Share Contract l’applicazione source

9 gennaio 2013

Nelle pagine precedenti dedicate al Search Contract abbiamo preso familiarità con il concetto di “contratto” in Windows 8.

I contratti regolano l’interazione fra un’applicazione e il sistema operativo, consentendo di accedere alle funzionalità “disciplinate” dal contratto stesso (consentendo all’utente, ad esempio, di effettuare delle ricerche all’interno dei contenuti interni di un’applicazione, come nel caso del Search Contract, appunto).

In questo articolo ci occuperemo del contratto di sharing, che permette il passaggio di dati (testo, immagini, uri, ecc.) da un’applicazione a un’altra senza che sia necessaria alcuna comunicazione diretta fra le applicazioni coinvolte (e dunque senza che queste debbano conoscersi a priori). Per chi non è più giovanissimo è la versione ultra moderna di DDE.

Il trasferimento dei dati è reso possibile dall’intermediazione del sistema operativo, il quale agisce come una sorta di “ponte” tra le due applicazioni, provvedendo a invocare le API esposte da entrambe.

A differenza del Search Contract, che regola l’interazione tra il sistema operativo e una specifica applicazione, nel caso dello Sharing Contract gli “attori” coinvolti sono dunque tre: l’applicazione che “espone” i dati che l’utente intende condividere (detta “source”), quella che riceve tali dati (detta “target”) e il sistema operativo che provvede a coordinare e regolare il passaggio dei dati dall’una all’altra.

Figura 1.

Nell’immagine seguente è mostrato un esempio di applicazione nativa di Windows 8 (in questo caso Internet Explorer 10) in grado di condividere testo, immagini e uri con altre applicazioni.

Figura 2.
(clic per ingrandire)

L’attivazione della funzionalità di condivisione è particolarmente intuitiva: è sufficiente selezionare gli elementi che si intendono condividere (del semplice testo, nel nostro caso) e selezionare il charm di Share nella Charms Bar. Il sistema operativo selezionerà per noi le applicazioni, tra quelle installate sul nostro PC, che sono in grado di condividere quella particolare tipologia di contenuti.

Selezionando l’applicazione desiderata (ad esempio, Mail), ecco quello che otteniamo:

Figura 3.
(clic per ingrandire)

In questo articolo vedremo come implementare una semplice applicazione il cui contenuto essere condiviso da altre applicazioni, mentre il come questi dati vengano “consumati” da parte di altre applicazioni è descritto nel prossimo articolo dedicato alle applicazioni “Share Target”.

Si tratta infatti di profili che, per quanto collegati dal punto di vista funzionale, restano tuttavia separati, dal momento che, come si è più volte ripetuto, le due applicazioni non comunicano direttamente fra loro, ma interagiscono con il sistema operativo separatamente l’una dall’altra.

Ciò detto, per prima cosa creiamo una nuova applicazione source. In Visual Studio 2012 creiamo un nuovo progetto di tipo Windows Store e selezioniamo il template Blank App (XAML):

Figura 4.
(clic per ingrandire)

Prima di proseguire, popoliamo la nostra applicazione con alcuni dati d’esempio da condividere con altre applicazioni. L’esempio che segue non ha ovviamente nessuna pretesa grafica, né tantomeno riflette soluzioni architetturali reali, ma ha finalità puramente illustrative del funzionamento delle operazioni di condivisione in Windows 8.

Riprendendo l’esempio fatto nell’articolo sullo sul Search Contract, aggiungiamo al progetto una nuova classe, denominata Bike, che rappresenta i nostri ormai classici modelli di mountain bike, e una classe Biz il cui unico metodo, GetAllBikes(), restituisca la relativa collezione.

Questo che segue è il codice completo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Html.it.Demo.SharingSource
{
    public class Biz
    {
        public List<Bike> GetAllBikes()
        {
            return new List<Bike>()
            {
                new Bike() { BikeName = "Specialized Stumpjumper" },
                new Bike() { BikeName = "Scott Spark" },
                new Bike() { BikeName = "Kona Abra Cadabra" },
                new Bike() { BikeName = "Cannondale Jekill" },
                new Bike() { BikeName = "Rocky Mountain Altitude" },
                new Bike() { BikeName = "Bianchi Metanol" },
                new Bike() { BikeName = "Santacruz Tallboy" },
                new Bike() { BikeName = "Canyon Torque" }
            };
        }
    }

    public class Bike
    {
        public string BikeName { get; set; }
    }
}

Nella pagina MainPage.xaml aggiungiamo un controllo ListView che mostri l’elenco dei modelli di mountain bike disponibili. Il codice da aggiungere è evidenziato in grassetto nel seguente listato:

<Page
    x:Class="Html.it.Demo.SharingSource.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Html.it.Demo.SharingSource"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <ListView x:Name="list" DisplayMemberPath="BikeName" SelectedValuePath="BikeName"/>
    </Grid>
</Page>

Infine, nel costruttore della classe MainPage.xaml.cs mettiamo il controllo ListView appena creato in binding con la collezione di biciclette:

public MainPage()
{
  this.InitializeComponent();
  
  // <parte da aggiungere> 
  
  var biz = new Biz();
  
  this.list.ItemsSource = biz.GetAllBikes();
  
  // </parte da aggiungere> 
}

Premendo F5, questo dovrebbe essere il risultato:

Figura 5.
(clic per ingrandire)

Ora che abbiamo dei dati d’esempio, proviamo a condividerli con altre applicazioni.

Tutte le lezioni

1 ... 8 9 10 ... 28

Se vuoi aggiornamenti su Share Contract l'applicazione source inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Share Contract l'applicazione source

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy