void listServerGet(object sender, ListServerGetOrFreeEventArgs e)
        {
            GetSourceEventArgs args = new GetSourceEventArgs(new ServerModeCoreExtender());

            e.Tag = args;
            if (!string.IsNullOrEmpty(this.KeyExpression))
            {
                args.KeyExpression = this.KeyExpression;
            }
            args.AreSourceRowsThreadSafe = this.AreSourceRowsThreadSafe;
            if (this.GetSource != null)
            {
                this.GetSource(this, args);
            }
            if (args.Query == null)
            {
                e.ListServerSource = new DummyListServer();
            }
            else
            {
                WcfServerModeSource src = new WcfServerModeSource(args.Extender);
                e.ListServerSource = src;
                src.KeyExpression  = args.KeyExpression;
                src.Query          = args.Query;
                src.DefaultSorting = this.DefaultSorting;
            }
        }
        void listServerFree(object sender, ListServerGetOrFreeEventArgs e)
        {
            GetSourceEventArgs args = ((GetSourceEventArgs)e.Tag);

            if (DismissSource != null)
            {
                DismissSource(this, args);
            }
        }
        void getTypeInfo(object sender, GetTypeInfoEventArgs e)
        {
            GetSourceEventArgs           getQueryArgs      = (GetSourceEventArgs)e.Tag;
            PropertyDescriptorCollection sourceDescriptors = ListBindingHelper.GetListItemProperties(e.ListServerSource);

            if (getQueryArgs.Query == null)
            {
                e.TypeInfo = new TypeInfoNoSource(this.DesignTimeElementType);
            }
            else if (getQueryArgs.AreSourceRowsThreadSafe)
            {
                e.TypeInfo = new TypeInfoThreadSafe(sourceDescriptors);
            }
            else
            {
                e.TypeInfo = new TypeInfoProxied(sourceDescriptors, this.DesignTimeElementType);
            }
        }