×
Namespaces

Variants
Actions
(Difference between revisions)

How to send an email using the Cimalino Windows Phone Toolkit

From Nokia Developer Wiki
Jump to: navigation, search
hamishwillee (Talk | contribs)
(Hamishwillee - Subedited/Reviewed)
saramgsilva (Talk | contribs)
(Saramgsilva - - Introduction)
Line 32: Line 32:
 
A screenshot of the example app is shown below.  
 
A screenshot of the example app is shown below.  
  
{{HamishW|Insert the screenshot here and remove this comment}}
+
[[File:SendMail.png|300px]]
 
+
  
 
== Building the example code ==
 
== Building the example code ==

Revision as of 22:08, 23 November 2013

This article shows how to launch a task to send an email using EmailComposeService from the Cimbalino Windows Phone Toolkit.

WP Metro Icon Messages.png
SignpostIcon XAML 40.png
WP Metro Icon WP8.png
SignpostIcon WP7 70px.png
Article Metadata
Code Example
Source file: EmailComposeService (Github)
Tested with
SDK: Windows Phone 8.0 SDK, Windows Phone 7.1.1 SDK
Devices(s): Nokia Lumia 800, 920
CompatibilityArticle
Created: saramgsilva (08 Nov 2013)
Last edited: saramgsilva (23 Nov 2013)

Contents

Introduction

The Cimbalino Windows Phone Toolkit delivers a set of useful and powerful MVVM-compatible tools and services to help developers build Silverlight applications for Windows Phone. The Toolkit is divided in projects which deliver different features, ranging from base MVVM services and helpers, through to code for background agents, and for accessing media library, location services etc.

The Cimbalino Toolkit's "Email Compose" service is an MVVM compatible wrapper around the system EmailComposeTask, which can be used to launch a dialog to email users. The kit provides both the IEmailComposeService interface and its implementation EmailComposeService required to register the service in MVVM Light (note that MVVM and the MVVM Light Toolkit are not "preconditions" to use this service).

This article explains how to use the service in an MVVM Light app. Developers should first read How to use MVVM Light Toolkit for Windows Phone for a general overview of MVVM Light and how to use services.

A screenshot of the example app is shown below.

SendMail.png

Building the example code

The source code for the code example is available here: EmailComposeService (Github)

To build the source code you will also need the MVVM Light Toolkit and the Cimbalino Windows Phone Toolkit. Their packages are available in the Nuget Package Manager. For more details see:


The sample is built using MVVM Light and the article does not go into great detail about the plumbing/infrastructure provided by the toolkit. For more information see:

Registering the service

Register the service in the ViewModelLocator constructor as shown below.

  1.  /// <summary>
  2.     /// This class contains static references to all the view models in the
  3.     /// application and provides an entry point for the bindings.
  4.     /// </summary>
  5.     public class ViewModelLocator
  6.     {
  7.         /// <summary>
  8.         /// Initializes a new instance of the ViewModelLocator class.
  9.         /// </summary>
  10.         public ViewModelLocator()
  11.         {
  12.             ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
  13.  
  14.             if (!SimpleIoc.Default.IsRegistered<IEmailComposeService>())
  15.             {
  16.                 SimpleIoc.Default.Register<IEmailComposeService, EmailComposeService>();
  17.             }
  18.  
  19.  
  20.             SimpleIoc.Default.Register<MainViewModel>();
  21.         }
  22.  
  23.         public MainViewModel MainViewModel
  24.         {
  25.             get
  26.             {
  27.                 return ServiceLocator.Current.GetInstance<MainViewModel>();
  28.             }
  29.         }
  30.  
  31.         public static void Cleanup()
  32.         {
  33.             // TODO Clear the ViewModels
  34.         }
  35.     }

Implementing the ViewModel

Implement the MainViewModel as shown below. The highlighted sections show the MainViewModel constructor taking the IEmailComposeService parameter and assigning it to the private variable. Later on the private member is used to show the link service.

 /// <summary>
/// This class contains properties that the main View can data bind to.
/// </summary>
public class MainViewModel : ViewModelBase
{
/// <summary>
/// The public application url.
/// </summary>
private readonly string _appUrl;
 
/// <summary>
/// The email compose service.
/// </summary>
private readonly IEmailComposeService _emailComposeService;
 
/// <summary>
/// The message
/// </summary>
private string _message;
 
/// <summary>
/// The subject
/// </summary>
private string _subject;
 
/// <summary>
/// The to
/// </summary>
private string _to;
 
/// <summary>
/// Initializes a new instance of the <see cref="MainViewModel"/> class.
/// </summary>
/// <param name="emailComposeService">
/// The email Compose Service.
/// </param>
public MainViewModel(IEmailComposeService emailComposeService)
{
_emailComposeService = emailComposeService;
 
SendFeedbackCommand = new RelayCommand(SendFeedback);
ShareToMailCommand = new RelayCommand(ShareToMail);
SendCommand =new RelayCommand(Send);
_appUrl = string.Concat("http://windowsphone.com/s?appid=8df00038-1b7a-406b-b33f-37a78b17348c");
}
 
/// <summary>
/// Gets or sets the message.
/// </summary>
/// <value>
/// The message.
/// </value>
public string Message
{
get { return _message; }
set { Set("Message", ref _message, value); }
}
 
/// <summary>
/// Gets the send command.
/// </summary>
/// <value>
/// The send command.
/// </value>
public ICommand SendCommand { get; private set; }
 
/// <summary>
/// Gets the send feedback command.
/// </summary>
public ICommand SendFeedbackCommand { get; private set; }
 
/// <summary>
/// Gets the share to e-mail command.
/// </summary>
public ICommand ShareToMailCommand { get; private set; }
 
/// <summary>
/// Gets or sets the subject.
/// </summary>
/// <value>
/// The subject.
/// </value>
public string Subject
{
get { return _subject; }
set { Set("Subject", ref _subject, value); }
}
 
/// <summary>
/// Gets or sets to.
/// </summary>
/// <value>
/// To.
/// </value>
public string To
{
get { return _to; }
set { Set("To", ref _to, value); }
}
 
/// <summary>
/// Sends mails.
/// </summary>
private void Send()
{
if (!string.IsNullOrEmpty(To) && !string.IsNullOrEmpty(Subject) && !string.IsNullOrEmpty(Message))
{
_emailComposeService.Show(To, Subject, Message);
}
}
 
/// <summary>
/// The send feedback.
/// </summary>
private void SendFeedback()
{
const string to = "saramgsilva@gmail.com";
const string subject = "My Feedback";
var body = "This the body";
_emailComposeService.Show(to, subject, body);
}
 
/// <summary>
/// The share to mail.
/// </summary>
private void ShareToMail()
{
const string Subject = "Cimbalino Toolkit Sample";
var body = string.Concat("This application is amazing, you should try it! See in", _appUrl);
_emailComposeService.Show(Subject, body);
}
}

Implementing the view

The rest of the app is "plumbing" to hook up the MainViewModel to the View and send commands back to the invoke the service. How to use MVVM Light Toolkit for Windows Phone explains most of what is going on.

Add the binding in main page as shown:

 DataContext="{Binding MainViewModel,
Source={StaticResource Locator}}"

The MainPage.xaml can be the following:

<phone:PhoneApplicationPage x:Class="CimbalinoSample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cimbalino="clr-namespace:Cimbalino.Phone.Toolkit.Behaviors;assembly=Cimbalino.Phone.Toolkit"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
DataContext="{Binding MainViewModel,
Source={StaticResource Locator}}"

FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
Orientation="Portrait"
SupportedOrientations="Portrait"
shell:SystemTray.IsVisible="True"
mc:Ignorable="d">
 
<!-- LayoutRoot is the root grid where all page content is placed -->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
 
<!-- TitlePanel contains the name of the application and page title -->
<StackPanel x:Name="TitlePanel"
Grid.Row="1"
Margin="0,5,12,396">
<TextBlock Margin="12,0"
Style="{StaticResource PhoneTextTitle2Style}"
Text="Cimbalino Toolkit Sample" />
</StackPanel>
<TextBlock Grid.RowSpan="2"
Margin="12,50,-3,639"
Style="{StaticResource PhoneTextTitle3Style}"
TextWrapping="Wrap">
This samples has the goal to show how to use Cimbalino Toolkit - EmailComposeService.
</TextBlock>
<!-- ContentPanel - place additional content here -->
<Grid x:Name="ContentPanel"
Grid.Row="1"
Margin="12,150,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="To:" />
<TextBox Grid.Row="1" Text="{Binding To, Mode=TwoWay}" />
 
<TextBlock Grid.Row="2" Text="Subject:" />
<TextBox Grid.Row="3" Text="{Binding Subject, Mode=TwoWay}" />
<TextBlock Grid.Row="4" Text="Message:" />
<TextBox Grid.Row="5"
Height="200"
Text="{Binding Message,
Mode=TwoWay}" />

<Button Grid.Row="6"
Command="{Binding SendCommand}"
Content="Send" />
</Grid>
<i:Interaction.Behaviors>
<cimbalino:ApplicationBarBehavior>
 
<cimbalino:ApplicationBarIconButton Command="{Binding SendFeedbackCommand,
Mode=OneTime}"

IconUri="/Images/appbar.reply.email.png"
Text="Feedback" />
<cimbalino:ApplicationBarIconButton Command="{Binding ShareToMailCommand,
Mode=OneTime}"

IconUri="/Images/appbar.email.png"
Text="Email" />
</cimbalino:ApplicationBarBehavior>
</i:Interaction.Behaviors>
</Grid>
 
</phone:PhoneApplicationPage>


Related samples

Source Code

The source code is available here

122 page views in the last 30 days.
×