WPF的所有UI控件都是依赖对象,控件的属性都是依赖属性。
依赖属性(DependencyProperty
)是一种自己可以没有值,但是通过Binding从数据源可以获得值的属性。拥有依赖属性的对象必须为依赖对象(DependencyObject
)。
依赖对象具有SetValue
和GetValue
两个方法。
依赖属性的名称通常约定以Property
结尾,且只能以DependencyProperty.Register
方法创建。
尽管依赖对象没有继承INotifyPropertyChanged
,依赖属性在值改变时天生可以通知其Binding对象。
<TextBox x:Name="textbox1" Width="100" Height="50" BorderBrush="Red" Margin="5"></TextBox>
<TextBox x:Name="textbox2" Width="100" Height="50" BorderBrush="Red" Margin="5"></TextBox>
<Button Content="{Binding A}" Width="50" Click="Button_Click"></Button>
...
Student stu = new Student();
stu.SetBinding(Student.NameProperty, new Binding("Text") { Source = textbox1 });
textbox2.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = stu });
...
public class Student : DependencyObject
{
public static readonly DependencyProperty NameProperty = DependencyProperty.Register(
"Name",//依赖属性
typeof(string),//依赖属性注册类型
typeof(Student)//依赖对象
);
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
}
//WPF中只有BindingOperations 和 UI元素对象可以直接调用SetBinding,通过该方法封装让依赖属性也可以调用
public BindingExpressionBase SetBinding(DependencyProperty dp, BindingBase binding)
{
return BindingOperations.SetBinding(this, dp, binding);
}
}