参考文档:Binding declarations overview - WPF .NET | Microsoft Learn
在XAML中声明绑定
Binding是一个拓展标记,用它来声明一个绑定,声明表达式由一系列的从子句组成 -- 它们跟在Binding关键字的后面,并用','隔开. 子句的位置是任意的,它们有很多种组合。子句'Name=Value',Name是Binding的属性,Value是设置给属性的值。
在标记中创建绑定声明字符串时,必须将它附加到目标对象的依赖属性,以下是一个绑定到TextBox.Text的绑定表达式
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>
更多关于Binding拓展标记请查看: Binding Markup Extension - WPF .NET Framework | Microsoft Learn
对象元素语法
对象元素语法是创建绑定声明的另一种选择。多数情况下使用标记拓展或元素对象的语法并没有特别的优势。但是当属性值不是字符串,也不存在类型转换,此时你需要用到对象元素语法:
<TextBlock>
<TextBlock.Text>
<Binding Source="{StaticResource myDataSource}" Path="Name"/>
</TextBlock.Text>
</TextBlock>
MultiBinding 和 PriorityBinding
MultiBinding和PriorityBinding不支持XAML拓展语法,如果在XAML中声明它们,就必须使用对象元素语法。
在代码中创建绑定
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// Make a new data source object
var personDetails = new Person()
{
Name = "John",
Birthdate = DateTime.Parse("2001-02-03")
};
// New binding object using the path of 'Name' for whatever source object is used
var nameBindingObject = new Binding("Name");
// Configure the binding
nameBindingObject.Mode = BindingMode.OneWay;
nameBindingObject.Source = personDetails;
nameBindingObject.Converter = NameConverter.Instance;
nameBindingObject.ConverterCulture = new CultureInfo("en-US");
// Set the binding to a target object. The TextBlock.Name property on the NameBlock UI element
BindingOperations.SetBinding(NameBlock, TextBlock.TextProperty, nameBindingObject);
// NameBlock.Setinding()
}
绑定路径语法
使用Path属性指定绑定源:
- 最简单的情况,
Path=PropertyName
- 使用子属性,
Path=ShoppingCar.Order
- 使用索引器,
Path=ShoppingCart[0]
- 多索引器,
Path="[(sys:Int32)42,(sys:Int32)24]
, (类型)值 - 如果源是集合,
Path=/
表示当前项 Path=/Offices/ManagerName
集合的当前值.Offices的当前值.ManagerNamePath=.
相当于 "{Binding}"
转义机制
在索引器([])中,插入字符(^)转义下一个字符
Binding declarations overview - WPF .NET | Microsoft Learn
绑定方向
Binding declarations overview - WPF .NET | Microsoft Learn