我在窗口中有简单的依赖属性。
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上绑定直接依赖属性?
答案 0 :(得分:2)
对于该属性,您static DependencyPropertyIdentifier
与instance CLR wrapper
混淆。
DependencyPropertyIdentifier是静态字段,它在类级别注册并嵌入在类元数据中。获取并设置实例的值时,会在该DP标识符上调用GetValue()
和SetValue()
。
来自MSDN -
- 依赖项属性标识符:DependencyProperty实例,在注册依赖项时作为返回值获取 属性,然后存储为类的静态成员。这个 identifier用作许多交互API的参数 使用WPF属性系统。
- CLR“wrapper”:属性的实际get和set实现。这些实现包含依赖项属性 因此,在GetValue和SetValue调用中使用它的标识符 使用WPF属性系统为属性提供支持。
醇>
给定类型的依赖项属性可通过属性系统作为存储表访问。实例值存储在该存储表中,XAML处理器的WPF实现使用该表来获取和设置实例对象的值。