【avalonia教程】10数据绑定语法格式
关于控件属性,绑定DataContext中属性的语法,我们目前已经见过了:
<TextBlock Text="{Binding PageDesc}"></TextBlock>
接下来,详细讲解下数据绑定语法的细节,官方给定的语法格式如下:
<SomeControl SomeProperty="{Binding Path, Mode=ModeValue, StringFormat=Pattern}" />
我们先来看第一个参数Path,实际上方的Binding PageDesc,是少了一个Path关键字的,完整的写法如下:
<TextBlock Name="TextBlockDemo" Text="{Binding Path=PageDesc}">
如果是DataContext属性的属性,也可以连写,举个例子,我们新建一个Student类,给Student类设置一个Name属性,并将Student类定义为MainWindowViewModel的一个属性,代码如下:
public class Student
{public string? Name { get; set; }
}public class MainWindowViewModel
{public Student? StudentInfo { get; set; }
}
同时将在初始化MainWindow对象时, 添加数据上下文,代码如下:
desktop.MainWindow = new MainWindow(){// 给 MainWindow 添加数据上下文DataContext = new MainWindowViewModel(){StudentInfo = new Student(){Name = "jack"}}};
将MainWindowViewModel对象的StudutInfo属性的Name属性与TextBlock的Text属性进行绑定,代码如下:
<TextBlock Name="TextBlockDemo" Text="{Binding StudentInfo.Name}"></TextBlock>
如果想将TextBlock的Text属性,绑定到TextBlock自身控件找到的数据上下文(可能是自身的,也可能是父控件的),可以用 . 或者省略,代码如下:
<TextBlock Text="{Binding}"/>
<TextBlock Text="{Binding .}"/>
接下来介绍数据绑定模式。什么意思呢?就是影响方向。比如上例中,MainWindowViewModel的PageDesc属性,和TextBlock的Text属性绑定,那如果在程序运行的过程中,PageDesc属性更改,是否会影响Text属性同步更改?反过来,Text属性更改,是否会影响PageDesc属性更改呢?
这里我们直接给结论,如果数据上下文的属性更改,会直接影响到控件属性的更改,这种绑定模式就叫做OneWay;如果控件属性的更改,会影响到数据上下文的更改,这种模式叫做OneWayToSource,如果双方互相影响,这种模式就叫做TwoWay。一共有以下五种模式,大家先大概理解下这个思想,并且眼熟一下,等我们后续讲到mvvm相关内容时,会给大家详细的讲解这块内容。