获取或设置附加属性的访问器未在数据绑定上触发?WPF

获取或设置附加属性的访问器未在数据绑定上触发?WPF,wpf,data-binding,properties,attached-properties,Wpf,Data Binding,Properties,Attached Properties,我有一个自定义的附加属性,但上的访问器在数据绑定时从未被访问。 是否每次附加属性更改时都要访问这些访问器 public static readonly DependencyProperty CharacterColumnNumberProperty = DependencyProperty.RegisterAttached("CharacterColumnNumber", typeof(int), typeof(DragCanvas), new UIPropertyMetad

我有一个自定义的附加属性,但上的访问器在数据绑定时从未被访问。 是否每次附加属性更改时都要访问这些访问器

  public static readonly DependencyProperty CharacterColumnNumberProperty =
        DependencyProperty.RegisterAttached("CharacterColumnNumber", typeof(int), typeof(DragCanvas), new UIPropertyMetadata(1));

    public static int GetCharacterColumnNumber(UIElement uiElement)
    {
        if (uiElement != null)
            return (int)uiElement.GetValue(CharacterColumnNumberProperty);
        else return 0;
    }

    public static void SetCharacterColumnNumber(UIElement uiElement, int value)
    {
        if (uiElement != null)
        {
            uiElement.SetValue(CharacterColumnNumberProperty, value);
            DragCanvas.SetLeft(uiElement, value * 10);
        }
    }
XAML:


不,它们不是。如果您想知道内部属性引擎何时更改这些值,请传入UIPropertyMetadata参数的委托


每次更改属性时都会调用此委托,无论是通过CLR属性还是通过依赖项属性引擎内部的更改(即绑定)。

绑定不访问属性--它们使用基础依赖项对象和绑定框架访问依赖项属性的值。这一次也让我很惊讶,当我第一次开始和DP鬼混的时候。WPF中有很多隐藏的东西。如果WPF属性系统没有使用访问器,为什么框架(或xaml编辑器)需要访问器遵守命名约定?谢谢你的回答,这很有意义。但据我所知,附加属性的一个最常见的用途是更改布局。当CharacterColumnNumber更改时,PropertyChangedCallback参数是否为我提供了更改UIElement左侧画布的最佳选项?ie:Canvas.Left=CharacterColumnNumber*10。重申一下,我想将CharacterColumnNumber值绑定到画布上的位置。在写了最后一条评论后,我想到了使用转换器,也许是更好的选择?但是如果我不想使用转换器,上面的方法会是最好的方法吗?谢谢
 <Setter Property="local:DragCanvas.CharacterColumnNumber" Value="{Binding Path=CharacterColumnNumber, Mode=TwoWay}" />