protected void UpdateTargetProperty(IList <MediaItem> items, MediaItemQueryMode queryMode)
        {
            IDataDescriptor targetDataDescriptor = _targetDataDescriptor;

            if (targetDataDescriptor == null)
            {
                return;
            }

            object result;

            //Try and update our target property with either a media item enumeration or the first media item
            if ((queryMode != MediaItemQueryMode.SingleItem && TypeConverter.Convert(items, targetDataDescriptor.DataType, out result)) ||
                (queryMode != MediaItemQueryMode.MultipleItems && TypeConverter.Convert(items != null ? items.FirstOrDefault() : null, targetDataDescriptor.DataType, out result)))
            {
                lock (_syncObj)
                {
                    //Avoid multiple updates with the same value
                    if (ReferenceEquals(_lastUpdatedValue, result))
                    {
                        return;
                    }
                    _lastUpdatedValue = result;
                }
                targetDataDescriptor.Value = result;
            }
        }
        //Performs the actual query and updates the target property with the returned media item(s)
        protected void QueryMediaItems()
        {
            IFilter filter = Filter;

            if (filter == null)
            {
                //Set target property to null if invalid to remove any previously assigned media items
                UpdateTargetProperty(null, QueryMode);
                return;
            }

            IContentDirectory cd = ServiceRegistration.Get <IServerConnectionManager>().ContentDirectory;

            if (cd == null)
            {
                return;
            }

            MediaItemQueryMode queryMode = QueryMode;
            MediaItemQuery     query     = new MediaItemQuery(NecessaryRequestedMIAs, OptionalRequestedMIAs, filter);

            if (queryMode == MediaItemQueryMode.SingleItem)
            {
                query.Limit = 1;
            }

            IList <MediaItem> items = cd.Search(query, true, GetCurrentUserId(), false);

            UpdateTargetProperty(items, queryMode);
        }