附加行为 属性 未通过 UWP 中的绑定设置

Attached Behavior property not being set by binding in UWP

我创建了一个具有依赖性 属性 的行为 class,我想将其附加到我认为的控件 (XAML)。我正在使用 MVVM,我需要通过将它绑定到我的 ViewModel 中的 属性 来设置这个附加的 属性,但它没有被设置。这是我想做的事情的简化版本:

行为 Class:

public static class TestBehavior
{
    public static readonly DependencyProperty SomeStringProperty =
        DependencyProperty.Register("SomeString", typeof(string), typeof(TestBehavior), new PropertyMetadata(""));

    public static string GetSomeString(DependencyObject o)
    {
        return (string)o.GetValue(SomeStringProperty);
    }

    public static void SetSomeString(DependencyObject o, string value)
    {
        o.SetValue(SomeStringProperty, value);
    }

}

XAML:

<TextBlock Text="{Binding ViewModelProperty}" local:TestBehavior.SomeString="{Binding ViewModelProperty}" />

TextBlock 的 "Text" 属性 绑定正确,但行为的 "SomeString" 属性 绑定不正确。

有趣的是 - 如果我 "hard code" 将行为 属性 设置为一个值,它就会被设置。例如:

<TextBlock Text="{Binding TestValue}" local:TestBehavior.SomeString="Foo" /> <!-- This Works --> 

知道为什么绑定到行为 属性 不起作用吗?

您希望附加的行为做什么?

您是否通过在 GetSomeString/SetSomeString 方法上设置断点来确定附加的 属性 is/isn 无法正常工作?如果是这样,这将不适用于绑定,因为使用绑定时不会调用 Get/Set 方法。

如果您想在附加的 属性 更改时做出反应,而不管它是否通过绑定,则使用 Register 中指定的 PropertyMetadataPropertyChangedCallback打电话。