Click here to Skip to main content
15,885,278 members
Articles / Programming Languages / C#

Thread-safe Silverlight Cairngorm

Rate me:
Please Sign up or sign in to vote.
4.75/5 (9 votes)
20 Oct 2008CDDL6 min read 49.3K   320   21  
Some code changes and improvements that make the Silverlight Cairngorm thread-safe
using System;
using System.Collections.Generic;

using SilverlightCairngorm;
using SilverlightCairngorm.Model;
using System.Windows.Media.Imaging;

namespace SilverlightCairngormDemo.Model
{
	public class SilverPhotoModel : ModelLocator
	{
		private static readonly SilverPhotoModel _instance = new SilverPhotoModel();

		/// <summary>
		/// Returns the single instance of the app model
		/// </summary>
		/// <returns>single instance of the app model</returns>
		public static SilverPhotoModel Instance { get { return _instance; } }

		// Explicit static constructor to tell C# compiler
		// not to mark type as beforefieldinit
		static SilverPhotoModel()
		{
		}

		/// <summary>
		/// Private constructor for singeltom object
		/// </summary>
		private SilverPhotoModel() : base()
		{
		}

		private List<FlickRPhoto> _photoList = new List<FlickRPhoto>();
		/// <summary>
		/// Data model for search result data binding
		/// </summary>
		public List<FlickRPhoto> PhotoList
		{
			get { return _photoList; }
			set
			{
				_photoList = value; 
				NotifyPropertyChanged("PhotoList"); 
			}
		}

		private int _selectedIdx = -1;

		/// <summary>
		/// Data model for selected photo index
		/// </summary>
		public int SelectedIdx
		{
			get 
			{ 
				return _selectedIdx; 
			}
			set
			{
				_selectedIdx = value;
				NotifyPropertyChanged("SelectedPhotoSource");
				NotifyPropertyChanged("SelectedIdx");
			}
		}

		/// <summary>
		/// Read-only property for image displaying
		/// </summary>
		public string SelectedPhotoSource
		{
			get 
			{
				return (_selectedIdx < 0 || PhotoList.Count < 2) ? "" : PhotoList[_selectedIdx].ImageUrl;
			}
		}

		private string _searchTerm = "Cairngorm";
		/// <summary>
		/// Data model for search term
		/// </summary>
		public string SearchTerm
		{
			get { return _searchTerm; }
			set { _searchTerm = value; /*NotifyPropertyChanged("SearchTerm");*/ }
		}

		private bool _readySearchAgain = true;
		/// <summary>
		/// to prevent search again before previous search returns
		/// </summary>
		public bool ReadySearchAgain
		{
			get { return _readySearchAgain; }
			set { _readySearchAgain = value; NotifyPropertyChanged("ReadySearchAgain"); }
		}

	}
}

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.

License

This article, along with any associated source code and files, is licensed under The Common Development and Distribution License (CDDL)


Written By
Technical Lead
United States United States
https://github.com/modesty

https://www.linkedin.com/in/modesty-zhang-9a43771

https://twitter.com/modestyqz

Comments and Discussions