1

我在窗口中有简单的依赖属性。

    public static readonly DependencyProperty UserLastNameProperty =
        DependencyProperty.Register("UserLastName",
            typeof (string),
            typeof (MainWindow),
            new FrameworkPropertyMetadata(default(string),
                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public string UserLastName
    {
        get
        {
            return (string) GetValue(UserLastNameProperty);
        }
        set
        {
            SetValue(UserLastNameProperty, value);
        }
    }

当我在 textBox 绑定上绑定直接依赖属性时不起作用。

        <TextBox Margin="4" FontSize="14" x:Name="TxbLastName" MinWidth="200"
                 Text="{Binding UserLastNameProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

但是当我在 textBox 绑定上绑定 CLR 道具包装器时。

        <TextBox Margin="4" FontSize="14" x:Name="TxbLastName" MinWidth="200"
                 Text="{Binding UserLastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

为什么我不能在 textBox 上绑定直接依赖属性?

4

1 回答 1

2

static DependencyPropertyIdentifier对该instance CLR wrapper属性感到困惑。

DependencyPropertyIdentifier 是在类级别注册并嵌入到类元数据中的静态字段。而获取和设置实例的值,GetValue()SetValue()在该 DP 标识符上调用。

来自MSDN -

  1. 依赖属性标识符:一个DependencyProperty实例,在注册依赖属性时作为返回值获取,然后作为类的静态成员存储。此标识符用作与 WPF 属性系统交互的许多 API 的参数。
  2. CLR "wrapper":属性的实际 get 和 set 实现。这些实现通过在 GetValue 和 SetValue 调用中使用依赖属性标识符来合并它,从而为使用 WPF 属性系统的属性提供支持。

给定类型的依赖属性可以通过属性系统作为存储表进行访问。实例值存储在该存储表中,XAML 处理器的 WPF 实现使用该表来获取和设置实例对象的值。

我建议您在此处此处阅读有关它的更多信息。

于 2013-11-02T14:47:02.477 回答