public void ComposeCell (DataItemCollectionViewCell cell, DataItem dataItem)
		{
			var operationQueue = OperationQueueForCell (cell);
			operationQueue.CancelAllOperations ();

			cell.RepresentedDataItem = dataItem;
			cell.Label.Text = dataItem.Title;
			cell.ImageView.Alpha = 1f;
			cell.ImageView.Image = (UIImage)processedImageCache.ObjectForKey ((NSString)dataItem.Identifier);

			if (cell.ImageView.Image != null)
				return;

			var processImageOperation = new NSBlockOperation ();
			processImageOperation.AddExecutionBlock (() => {
				if (processImageOperation.IsCancelled)
					return;

				UIImage image = null;
				DispatchQueue.MainQueue.DispatchSync (() => {
					image = ProcessImageNamed (dataItem.ImageName);
				});

				if (image == null)
					return;

				processedImageCache.SetObjectforKey (image, (NSString)dataItem.Identifier);
				NSOperationQueue.MainQueue.AddOperation (() => {
					if (cell.RepresentedDataItem == null)
						return;

					cell.ImageView.Alpha = 0f;
					cell.ImageView.Image = image;
					UIView.Animate (0.25, () => cell.ImageView.Alpha = 1f);
				});
			});

			operationQueue.AddOperation (processImageOperation);
		}
		public void ConfigureWithDataItem (DataItem dataItem) 
		{
			DataItem = dataItem;
		}
		public void ConfigureWithDataItems (DataItem[] dataItems)
		{
			this.dataItems = dataItems;
			CollectionView.ReloadData ();
		}