绑定CRL包装器或绑定XAML元素上的直接依赖属性

时间:2013-11-02 13:30:07

标签: c# wpf binding dependency-properties

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

    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 prop包装器时。

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

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

1 个答案:

答案 0 :(得分:2)

对于该属性,您static DependencyPropertyIdentifierinstance CLR wrapper混淆。

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

来自MSDN -

  
      
  1. 依赖项属性标识符:DependencyProperty实例,在注册依赖项时作为返回值获取   属性,然后存储为类的静态成员。这个   identifier用作许多交互API的参数   使用WPF属性系统。
  2.   
  3. CLR“wrapper”:属性的实际get和set实现。这些实现包含依赖项属性   因此,在GetValue和SetValue调用中使用它的标识符   使用WPF属性系统为属性提供支持。
  4.   

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

我建议您详细了解herehere