2

编译器和运行时不会抱怨绑定,但 Setter 永远不会在我的 AutoCompleteTextBox 中命中。

<Controls:AutoCompleteTextBox   
    Items="{Binding Path=DropDownValues}"
    Width="200" 
    Grid.Column="1" 
    Height="30"
   Tag="{Binding}"
  />

 public partial class AutoCompleteTextBox
    {
        public static readonly DependencyProperty ItemsProperty =
            DependencyProperty.Register(
                "Items",
                typeof(ItemCollection),
                typeof(AutoCompleteTextBox),
                new PropertyMetadata(default(ItemCollection), OnItemsPropertyChanged));


       public ItemCollection Items
       {
           get
           {
               return (ItemCollection)GetValue(ItemsProperty);
           }
           set
           {
               SetValue(ItemsProperty, value); //doesn't get hit
           }
       }


//This is how i'm cheating since my Items is always null
        private void CanvasName_Loaded(object sender, RoutedEventArgs e)
        {
            object obj = this.Tag;

            if (obj != null)
            {
                CjisQueryAutoCompleteData at = obj as CjisQueryAutoCompleteData;
                if (at != null)
                {
                    //use the data...
                    PopDropDown(at.DropDownValues);
                }
            }
        }

       //....
    }
4

1 回答 1

9

没有错。在 XAML 中设置依赖项属性时,WPF 直接访问 DependencyProperty,而不调用 CLR 包装器。把它想象成 WPF 会直接调用 SetValue。

请参阅XAML 加载和依赖属性,自定义依赖属性的含义。

OnItemsPropertyChanged但是,您会注意到在调用回调时已设置该属性。

于 2012-12-21T21:59:02.093 回答