一、什么是绑定 (Binding)
绑定顾名思义,是将我们获取到的数据和UI上的控件绑定起来利用数据的变化来更新界面所看到的内容。
把绑定分为五步:
1.绑定目标 2.绑定属性 3.绑定模式 4.绑定数据源 5.关联资源
1.1 绑定目标
绑定目标很好理解,其实就是你要操作绑定的控件。例如:Button,TextBox。
<TextBox Width="200" Height="25"></TextBox>
1. 2 绑定属性(依赖项属性)
<TextBox Width="200" Height="25" Text="{Bingding Name}"></TextBox>
绑定语法介绍:
如上代码块中,Text就是绑定属性了, Bingding 是绑定关键字,而后面的Name就是你要绑定的数据源的变量名。
1.3 绑定模式
-
TwoWay 无论是目标属性还是源属性,只要发生了更改,TwoWay 就会更新目标属性或源属性。
-
OneWay 仅当源属性发生更改时更新目标属性。
-
OneTime 仅当应用程序启动时或 DataContext 进行更改时更新目标属性。
-
OneWayToSource 在目标属性更改时更新源属性。
-
Default:模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.
1.4 绑定数据源
一般来说可以是单个变量(int , double,string)、也可以是一个数据集(List)。根据需求和场景去定义。
1.5 关联资源 DataContext
在每一个窗体中,都有一个DataContext ,它是一个object类型主要用来存储绑定资源。
二、绑定和窗体xaml.cs操作的区别
区别在于,窗体后台文件直接访问控件的操作是事件驱动。比如说我上一个视频讲到的button的click事件,如果
没有事件的存在是改变不了界面的。
绑定操作,是以数据本身的变化来通知界面显示改变的。
UI代码和逻辑代码实现前后端分离。
三、绑定列子
MainWindow.xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="96*"/>
<RowDefinition Height="69*"/>
<RowDefinition Height="79*"/>
<RowDefinition Height="76*"/>
</Grid.RowDefinitions>
<TextBox HorizontalAlignment="Left" Text="{Binding mytext}" Height="23" Margin="138,32,0,0" Grid.Row="1" TextWrapping="Wrap" VerticalAlignment="Top" Width="230"/>
<TextBox HorizontalAlignment="Left" Text="{Binding mytext}" Height="23" Margin="138,22,0,0" Grid.Row="2" TextWrapping="Wrap" VerticalAlignment="Top" Width="230" Background="Red"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="188,28,0,0" Grid.Row="3" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.593,0.428"/>
</Grid>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new mymodel(); //DataContext 用mymodel类
}
}
mymodel.cs
using System.ComponentModel; //添加命名空间
namespace myWpf_binding
{
class mymodel:INotifyPropertyChanged //继承INotifyPropertyChanged接口
{
public event PropertyChangedEventHandler PropertyChanged;
private string _mytext="123";
public string mytext
{
set
{
_mytext = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("mytext"));
}
get
{
return _mytext;
}
}
}
}
效果图
当text1改变时,同时也会改变text2的内容,因为绑定了同一个mytext字段。