Mode(方向)とTrigger(きっかけ)について
Binding によるデータの連携には、データの方向と更新タイミングの指定が必要
1.BindingのMode(方向)とは、データ更新の方向を指定すること
[System.Windows.Data.BindingMode] ←(Enum型)
| 名前 | 方向 | 内容 |
| OneWay | (S→T) | 即更新 |
| TwoWay | (S→T) | 即更新 |
| 〃 | (S←T) | UpdataSourceTrigger値に依存 |
| OneWayToSource | (S←T) | 同上(ソースが非依存関係プロパティのとき) |
| OneTime | (S→T) | 初期設定された時に1回のみ |
| Default | (S→T) | Element毎に定義されている(例:TextBoxはTwoWay) |
2.BindingのTrigger(きっかけ)とは、データ更新のタイミングを指定すること
[System.Windows.Data.UpdateSourceTrigger] ←(Enum型)
| 名前 | 内容 |
| Default | ? |
| PropertyChanged | ソース値が変化したとき |
| LostFocus | ターゲット値が変化し、フォーカスを失ったとき |
| Explicit | ソース値が変化し、明示的にBindingExpressionの |
| UpdateSource()が実行されたとき |
3.改めて実際の例で、「TextBox」Bindingインスタンスに、Mode(方向)と
Trigger(きっかけ)が設定されているか見てみることにする
実際の例
1: #------------------------------------------------------ 2: if ($host.Version.Major -eq 3) {
3: powershell.exe4: } else {
5: powershell.exe -version 2 -sta 6: } 7: 8: if ($host.Version.Major -eq 3) {
9: add-type -assembly WindowsBase,PresentationCore,PresentationFramework,System.Xml,System.xaml10: } else {
11: add-type -assembly WindowsBase,PresentationCore,PresentationFramework 12: } 13: 14: $Xaml = @'
15: <Window 16: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 17: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 18: Title="Markup Extensions" Height="220" Width="175"> 19: 20: <Window.Resources> 21: <LinearGradientBrush x:Key="gradBrush" StartPoint="0,0" EndPoint="1,1"> 22: <GradientStop Color="SteelBlue" Offset="0" /> 23: <GradientStop Color="Silver" Offset="1"/> 24: </LinearGradientBrush> 25: </Window.Resources> 26: 27: <StackPanel Background="{StaticResource gradBrush}"> 28: <TextBox Name="tbValue" Margin="10" 29: Text="{Binding ElementName=sldrSlider, Path=Value, Mode=TwoWay}"/> 30: <Slider Name="sldrSlider" TickPlacement="TopLeft" Margin="10"/> 31: <Button Name="bnValue">Trigger</Button> 32: </StackPanel> 33: 34: </Window> 35: '@ 36: 37: $form = [System.Windows.Markup.XamlReader]::Parse($xaml) 38: 39: $script = {40: $bindExpression = $form.FindName("tbValue").GetBindingExpression(`
41: [System.Windows.Controls.TextBox]::TextProperty) 42: $bindExpression.UpdateSource() 43: } 44: 45: $form.findName("bnValue").add_Click($script)
46: $Form.ShowDialog() | out-null
「TextBox」の「Text依存関係プロパティ」につなげられている「Slider」の値を見る
> $form.findname("tbValue").GetBindingExpression ( `
[System.Windows.Controls.TextBox]::TextProperty).ParentBinding
> Mode TwoWay ←★1
> UpdateSourceTrigger Default ←★2
このように、「Binding」インスタンスにMode(方向)とTrigger(タイミング)が保持されている。
0 件のコメント:
コメントを投稿