前言
在 WPF 中,Binding 的 Mode 屬性決定了數據綁定的方向和行為。Mode 是 Binding 類的一個重要屬性,它指定了數據如何在源(Source)和目標(Target)之間流動。可用的 BindingMode 枚舉值有以下幾種:
1)OneWay (單向綁定)
2)TwoWay (雙向綁定)
3)OneTime (一次性綁定)
4)OneWayToSource (反向單向綁定)
5)Default (默認綁定)
下面分別介紹:
1、OneWay (單向綁定)
源屬性的更改會自動更新目標屬性,目標屬性的更改不會影響源屬性,適用于顯示數據但不允許用戶修改的場景
下面的xaml代碼中,slider_test是滑動控件對象,同時也是Binding的源,TextBox作為Binding的目標,由于是單向綁定,所以源屬性的更改會自動更新目標屬性,所以當我們滑動控件slider_test時,TextBox控件Text屬性得到更新。
<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red" /><TextBox Height="100" Background="Green" Text="{Binding Path= Value, ElementName=slider_test,Mode=OneWay}" /><Button Height="100" Background="Red" /></StackPanel>
</Window>
2、TwoWay (雙向綁定)
源屬性和目標屬性之間的更改會相互影響,目標屬性的更改會更新源屬性,反之亦然,常用于可編輯表單或用戶交互控件
下面的代碼中Mode設置為TwoWay,然后
<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red" /><TextBox Height="100" Background="Green" Text="{Binding Path= Value, ElementName=slider_test,Mode=TwoWay }" /><Button Height="100" Background="Red" /></StackPanel>
</Window>
更改滑動控件時,TextBox的Text屬性更新。
將TextBox的值更改為50,滑動控件的Value屬性也更新,由于滑動控件的范圍是0到100,所以滑動處于中間位置。下面我貼了兩張圖,第一張圖滑動控件沒有處于中間位置,你會發現此時鼠標光標位于“50”后面,這是因為默認情況下焦點離開TextBox才會觸發TextBox的Text屬性值改變,也就是屬性UpdateSourceTrigger的值默認值是LostFocus,如果你想要TextBox的值更改后立即觸發,直接將UpdateSourceTrigger的值更改為PropertyChanged即可。
下面的這張圖中滑動控件處于中間位置,因為我點擊了最下方的Button控件,讓鼠標焦點離開了TextBox,所以觸發了TextBox的Text屬性更改。
3、OneTime (一次性綁定)
只在綁定初始化時把源屬性的值更新給目標屬性一次,之后源屬性的更改不會影響目標屬性,適用于不需要更新的靜態數據
下面的xaml代碼中,滑動控件slider_test的Value屬性值為40,Binding的Mode屬性為OneTime,所以運行程序以后,TextBox的Text屬性變為40,但是之后改變滑動控件的值TextBox的值不會發生改變,這就是一次性綁定。
<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red" Value="40"/><TextBox Height="100" Background="Green" Text="{Binding Path= Value, ElementName=slider_test,Mode=OneTime }" /><Button Height="100" Background="Red" /></StackPanel>
</Window>
4、OneWayToSource (反向單向綁定)
與 OneWay 模式相反 ,目標屬性的更改會更新源屬性,源屬性的更改不會影響目標屬性,適用于特殊情況,如從 UI 元素收集數據
比如下面的xaml代碼中Mode設置為OneWayToSource,只有更改目標TextBox的Text屬性值時,源滑動控件slider_test的Value屬性才會發生變化,反之你改變slider_test的值,TextBox的Text屬性不會改變。
<Window x:Class="控件作為Binding的源.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:控件作為Binding的源"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><StackPanel><Slider x:Name="slider_test" Minimum="0" Maximum="100" Height="100" Background="Red" /><TextBox Height="100" Background="Green" Text="{Binding Path= Value, ElementName=slider_test,Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" /><Button Height="100" Background="Red" /></StackPanel>
</Window>
5、Default (默認綁定)
使用默認綁定模式,這個默認綁定模式是根據Binding的目標來決定的,比如目標是可編輯控件(如 TextBox.Text)默認為 TwoWay;對于不可編輯控件,(如 TextBlock.Text)默認為 OneWay
馬工撰寫的年入30萬+C#上位機項目實戰必備教程(點擊下方鏈接即可訪問文章目錄)
1、《C#串口通信從入門到精通》
2、《C#與PLC通信從入門到精通 》
3、《C# Modbus通信從入門到精通》
4、《C#Socket通信從入門到精通 》
5、《C# MES通信從入門到精通》
6、《winform控件從入門到精通》
7、《C#操作MySql數據庫從入門到精通》