private static void OnSourcePropertyChanged(DependencyObject d,
                                                    DependencyPropertyChangedEventArgs e)
        {
            AutoComplete ac = EnsureInstance((Control)d);

            ac.ViewSource.Source = e.NewValue;
        }
 private void OnCollectionViewSourceFilter(object sender, FilterEventArgs e)
 {
     if (AutoComplete.GetImplicitItemsFilter(controlUnderAutocomplete.Control) == ImplicitItemsFilter.Enabled)
     {
         var iho = e.Item as AutoComplete.IHaveAnOpinionOnFilter;
         AutoCompleteFilterPathCollection filterPaths = GetAutoCompleteFilterProperty();
         if (iho != null)
         {
             e.Accepted = iho.Match(controlUnderAutocomplete.Text);
         }
         else if (filterPaths != null)
         {
             Type t = e.Item.GetType();
             foreach (string autoCompleteProperty in filterPaths)
             {
                 PropertyInfo info  = t.GetProperty(autoCompleteProperty);
                 object       value = info.GetValue(e.Item, null);
                 if (TextBoxStartsWith(value))
                 {
                     e.Accepted = true;
                     return;
                 }
             }
             e.Accepted = false;
         }
         else
         {
             e.Accepted = TextBoxStartsWith(e.Item);
         }
     }
     else
     {
         e.Accepted = true;
     }
 }
        private static AutoComplete EnsureInstance(Control ctrl)
        {
            var ac = ( AutoComplete )ctrl.GetValue(AutoComplete.AutoCompleteInstance);

            if (ac == null)
            {
                ac = new AutoComplete(ctrl);
                //ac.SetControl( ctrl );
                ctrl.SetValue(AutoCompleteInstancePropertyKey, ac);
            }

            return(ac);
        }
		private static AutoComplete EnsureInstance( Control ctrl )
		{
			var ac = ( AutoComplete )ctrl.GetValue( AutoComplete.AutoCompleteInstance );
			if( ac == null )
			{
				ac = new AutoComplete( ctrl );
				//ac.SetControl( ctrl );
				ctrl.SetValue( AutoCompleteInstancePropertyKey, ac );
			}

			return ac;
		}
        private static void OnItemTemplatePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            AutoComplete ac = EnsureInstance(( Control )d);

            ac.ListBox.ItemTemplate = ( DataTemplate )e.NewValue;
        }