SlideShare une entreprise Scribd logo
1  sur  73
blending delicious user experiences for windows phone 7
the verysoftware team
menu entrée designing for windows phone 7: our experience main apptracker:the ultimate app for developers  dessert building tech.days app: tips & tricks
designing for windows phone 7: our experience our experience
10ios apps  on the app store
from iphone to windows phone 7
will it blend? :-) source: willitblend.com
oh yes!
your personal translator free trial http://bit.ly/dJYItw
developed in  10hours
polyglot 30+ languages pronunciation history of translations great user experience share by email & sms
gifts  organiser free version http://bit.ly/i2cHRH
gifts organise gifts list check prices track budget sort by recipient share by email & sms
apptracker:  the ultimate app for developers  apptracker
the ultimate tool to keep track of your windows phone 7 appson the marketplace free for a limited time http://bit.ly/hRlfik
apptracker ,[object Object]
follow your favourite
worldwide overview of reviews
detailed review list by region
translate reviews into 30+ languages
share reviews by email or sms
see the rating distributionby region or worldwide
see when new reviews are available,[object Object]
apptracker: 300+ reviews thank you  for your support! “ “ “ “ “ “ “ “ “ truly brilliant app coolest app for developers! perfect for developers! an essential app! simply awesome extremely useful  app for developers excellent design a must have for every WP7 developer ” love it! ” ” ” ” ” ” ” ”
apptracker: our favourite comment “ superb app. why only four stars? because it should be $5. you're letting the rest of us devs down by giving away such great free stuff! ”
apptracker: wp7comp award
building tech.days app: tips & tricks tips & tricks
tips & tricks: tech.days app design
tips & tricks:  tech.days app demo
tips & tricks:  make it blend
tips & tricks:  make it blend gotchas ,[object Object]
exceptions in constructors
database queriesguidelines for creating designer friendly views, msdn http://bit.ly/lRU00l
tips & tricks:  make it blend blend design-time data + dummy data in code
tips & tricks:  make it blend design-time data
tips & tricks:  make it blend dummy data in code
tips & tricks:  make it blend isindesigntool
tips & tricks:  make it blend isindesigntool
tips & tricks:  context menu using  mvvm
tips & tricks:  context menu using mvvm demo
tips & tricks:  context menu using mvvm listbox
tips & tricks:  context menu using mvvm datatemplate
tips & tricks:  context menu using mvvm datatemplate =usercontrol
tips & tricks:  context menu using mvvm usercontrol = view
tips & tricks:  context menu the problem
tips & tricks:  context menu using mvvm parent viewmodel child viewmodel child viewmodel child viewmodel notify selected child
tips & tricks:  context menu using mvvm parent parent viewmodel child viewmodel child viewmodel child viewmodel child
tips & tricks:  context menu using mvvm parent viewmodel child viewmodel child viewmodel child viewmodel proxy service calls children view state
tips & tricks: graphics, try xara designer
tips & tricks: graphics, avoid clip art a la ’97
tips & tricks:  different levels  of details optimise for mobile
tips & tricks:  different levels  of details optimise for mobile
tips & tricks: transitions “ the experience is in the transition between states, not the states themselves. bill buxton, principal researcher microsoft research, mix’09 video ”
tips & tricks: transitions, page navigation
tips & tricks: transitions, page navigation don’t forget to change the rootframe in app.xaml.cs:
tips & tricks: transitions, landscape orientation
tips & tricks:  transitions, animating screen rotation original code by michel salib http://bit.ly/bxQR5V
tips & tricks: transitions,  using fluid move behaviour
tips & tricks:  transitions tech.days app demo
tips & tricks: trial mode
tips & tricks: trial mode, helper code
tips & tricks: trial mode, using it
tips & tricks: getting ratings
tips & tricks: getting ratings, the code
tips & tricks: getting ratings, the dll notificationbox by tomer shamam http://bit.ly/d2IY61
tips & tricks: error reporting
tips & tricks: error reporting, what you get
tips & tricks: error reporting, the code
tips & tricks: user settings, the problem ,[object Object]
users lose and replace their phones
“occasionally” a bug requires an app to be uninstalled/reinstalled
users have to start using the app from scratch:all settings/data lost,[object Object]

Contenu connexe

Similaire à Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware)

Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7Comunidade NetPonto
 
The Future of Web Apps
The Future of Web AppsThe Future of Web Apps
The Future of Web AppsiCiDIGITAL
 
Achieving quality contraints
Achieving quality contraintsAchieving quality contraints
Achieving quality contraintsK Senthil Kumar
 
Snapchat - Google Docs.pdf
Snapchat - Google Docs.pdfSnapchat - Google Docs.pdf
Snapchat - Google Docs.pdfharikacheluru
 
Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017Christian Heilmann
 
Dev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guideDev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guideTrioBlack Trioblack
 
Mobile App Basics for Beginners
Mobile App Basics for BeginnersMobile App Basics for Beginners
Mobile App Basics for BeginnersSignUp4
 
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...jcitnmkt
 
How We Make Apps And Services
How We Make Apps And ServicesHow We Make Apps And Services
How We Make Apps And Servicesculturengine
 
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.comPhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.comPhoenixGMN WebAndAppsDevelopment
 
CEE the Mobile Activation Platform
CEE the Mobile Activation PlatformCEE the Mobile Activation Platform
CEE the Mobile Activation Platform#EndeavourMedia
 
10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile Apps10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile AppsWhalla Labs
 
5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdf5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdfCloudester Software LLP
 
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...Big Ideas Machine
 
Mobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdfMobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdfPolyxer Systems
 

Similaire à Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware) (20)

Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7
 
Mobile_Portfolio_new
Mobile_Portfolio_newMobile_Portfolio_new
Mobile_Portfolio_new
 
The Future of Web Apps
The Future of Web AppsThe Future of Web Apps
The Future of Web Apps
 
Achieving quality contraints
Achieving quality contraintsAchieving quality contraints
Achieving quality contraints
 
App Economy
App EconomyApp Economy
App Economy
 
Snapchat - Google Docs.pdf
Snapchat - Google Docs.pdfSnapchat - Google Docs.pdf
Snapchat - Google Docs.pdf
 
Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017
 
Dev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guideDev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guide
 
Mobile App Basics for Beginners
Mobile App Basics for BeginnersMobile App Basics for Beginners
Mobile App Basics for Beginners
 
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
 
How We Make Apps And Services
How We Make Apps And ServicesHow We Make Apps And Services
How We Make Apps And Services
 
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.comPhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
 
Android app development guide for freshers by ace web academy
Android app development guide for freshers  by ace web academyAndroid app development guide for freshers  by ace web academy
Android app development guide for freshers by ace web academy
 
Event App 101
Event App 101Event App 101
Event App 101
 
CEE the Mobile Activation Platform
CEE the Mobile Activation PlatformCEE the Mobile Activation Platform
CEE the Mobile Activation Platform
 
Google App Inventor
Google App InventorGoogle App Inventor
Google App Inventor
 
10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile Apps10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile Apps
 
5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdf5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdf
 
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...
 
Mobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdfMobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdf
 

Dernier

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Dernier (20)

Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware)

Notes de l'éditeur

  1. Code:private static bool? cachedIsTrialMode = null;public static bool IsTrialMode(){ return IsTrialMode(false);} public static bool IsTrialMode(bool forceFromCache) { // If this code is being run buy VS/Blend design tool, we don't want to MessageBox if (DesignerProperties.IsInDesignTool) return false; if ((forceFromCache) || (cachedIsTrialMode == null)) {#if DEBUGMessageBoxResult result = MessageBox.Show("Click ok to simulate paid version", "Simulate paid version?", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) {cachedIsTrialMode = false; } else {cachedIsTrialMode = true; }#elseLicenseInformationlicenseInfo = new LicenseInformation();cachedIsTrialMode = licenseInfo.IsTrial();#endif } return cachedIsTrialMode.Value; }
  2. Code:using Microsoft.Phone.Tasks;using Tomers.Phone.Controls;private static bool PerformedRatingPromptCheck = false;private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e){ if (!PerformedRatingPromptCheck) {PerformedRatingPromptCheck = true;intnumAppLaunches = 0;IsolatedStorageSettings.ApplicationSettings.TryGetValue<int>("Rating_numAppLaunches", out numAppLaunches);intnumNextRatingPrompt = 0; if (!IsolatedStorageSettings.ApplicationSettings.TryGetValue<int>("Rating_numNextRatingPrompt", out numNextRatingPrompt)) {numNextRatingPrompt = 5; } if (numAppLaunches >= numNextRatingPrompt) {IsolatedStorageSettings.ApplicationSettings["Rating_numNextRatingPrompt"] = numNextRatingPrompt * 2;NotificationBox.ShowAgain("Enjoying the app?", "Would you like to rate this app now?", "Ask me later", false,Surpressed => { }, "Rating_MsgPrompt", new NotificationBoxCommand("Yes", () => { new MarketplaceReviewTask().Show(); }), new NotificationBoxCommand("No", () => { })); }IsolatedStorageSettings.ApplicationSettings["Rating_numAppLaunches"] = numAppLaunches + 1; }}
  3. Code:NotificationBox.ShowAgain("Enjoying the app?", "Would you like to rate this app now?", "Ask me later", false,Surpressed => { }, "Rating_MsgPrompt", new NotificationBoxCommand("Yes", () => { new MarketplaceReviewTask().Show(); }), new NotificationBoxCommand("No", () => { }));
  4. Code:// Code to execute on Unhandled Exceptionsprivate void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e){ if (System.Diagnostics.Debugger.IsAttached) { // An unhandled exception has occurred; break into the debuggerSystem.Diagnostics.Debugger.Break(); } else {var result = MessageBox.Show("Would you like to email the details of this error to the Developer?\\n\\n(No personal information, other than your email address, will be sent to the Developer)", "An error has occurred!",MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) {var task = new EmailComposeTask();task.To = "contact@DeveloperEmailAddress.com";task.Subject = "Error Report: TechDays 2011 App";task.Body = String.Format("An unhandled exception occurred in TechDays 2011 App:\\n\\n{0}", e.ExceptionObject.ToString());task.Show(); } }}
  5. Code:void BackgroundLoadFavouriteSessions(object sender, DoWorkEventArgs e){varfavIDs = LoadFavouriteSessionsFromFile(); if (favIDs == null) { // We failed when loading from file so check the cloud storeCloudUserDataServiceClient client = new CloudUserDataServiceClient();client.GetStoredTechDaysUserDataCompleted += client_GetStoredTechDaysUserDataCompleted;client.GetStoredTechDaysUserDataAsync(HelperFuncs.UserID); } else { // Loaded from file successfully so use this dataSetFavourites(GetSessionListFromIDs(favIDs)); }}void client_GetStoredTechDaysUserDataCompleted(object sender, GetStoredTechDaysUserDataCompletedEventArgs e){ if ((e.Error == null) && (e.Result != null) && (!String.IsNullOrEmpty(e.Result.FavouriteIDs))) { if (MessageBox.Show("Would you like to restore your settings for this app?", "No settings found", MessageBoxButton.OKCancel) == MessageBoxResult.OK) {varfavouriteSessionList = GetSessionListFromIDString(e.Result.FavouriteIDs);SetFavourites(favouriteSessionList); } }}
  6. Code:private static string cachedUserID = null;public static string UserID{ get { if (cachedUserID == null) { string anid = UserExtendedProperties.GetValue("ANID") as string; if (anid != null) {cachedUserID = anid.Substring(2, 32); } else {cachedUserID = "EMULATOR_USER"; } } return cachedUserID; }}private void SaveFavouritesToCloud(string favIDString){TechDaysUserDatasaveData = new TechDaysUserData() {UserID = HelperFuncs.UserID,FavouriteIDs = favIDString };CloudUserDataServiceClient client = new CloudUserDataServiceClient();client.StoreTechDaysUserDataAsync(saveData);}
  7. Code:public class TechDaysDataEntryContext : TableServiceContext{ public static string TableName = "TechDaysDataEntrys"; public TechDaysDataEntryContext(CloudStorageAccount account) : base(account.TableEndpoint.ToString(), account.Credentials) { } public IQueryable<TechDaysDataEntry> TechDaysDataEntrys { get { return this.CreateQuery<TechDaysDataEntry>(TableName); } } public void AddTechDaysDataEntry(TechDaysDataEntrynewEntry) {this.AddObject(TableName, newEntry);this.SaveChanges(); }}public class TechDaysDataEntry : TableServiceEntity{ public string UserID { get { return PartitionKey; } set { RowKey = value; PartitionKey = value; } } public string FavouriteIDs { get; set; } public TechDaysDataEntry() { } public TechDaysDataEntry(string UserID, string inFavouriteIDs) {PartitionKey = UserID;RowKey = UserID;FavouriteIDs = inFavouriteIDs; }}
  8. Code:public TechDaysUserDataGetStoredTechDaysUserData(string userID){varstorageAccount = GetStorageAccount();vartddeContext = new TechDaysDataEntryContext(storageAccount);tddeContext.IgnoreResourceNotFoundException = true;var result = (from entry in tddeContext.TechDaysDataEntrys where entry.PartitionKey == userID && entry.RowKey == userID select entry).ToList(); if (result.Count == 1) {var entry = result.First();varuserData = new TechDaysUserData() {UserID = entry.UserID,FavouriteIDs = entry.FavouriteIDs }; return userData; } return null;}public void StoreTechDaysUserData(TechDaysUserDatauserData){varstorageAccount = GetStorageAccount();vartddeContext = new TechDaysDataEntryContext(storageAccount);tddeContext.IgnoreResourceNotFoundException = true;var result = (from entry in tddeContext.TechDaysDataEntrys where entry.PartitionKey == userData.UserID && entry.RowKey == userData.UserID select entry).ToList(); if (result.Count == 0) {var entry = new TechDaysDataEntry(userData.UserID, userData.FavouriteIDs);tddeContext.AddTechDaysDataEntry(entry); } else {var entry = result.First();entry.FavouriteIDs = userData.FavouriteIDs;tddeContext.UpdateObject(entry);tddeContext.SaveChanges(); }}[DataContract]public class TechDaysUserData{ [DataMember] public string UserID{ get; set; } [DataMember] public string FavouriteIDs { get; set; }}