WPF学習:バインド

6121 ワード

原文http://www.cnblogs.com/SouthAurora/archive/2010/06/30/1768464.html
一.要素オブジェクトにバインド
     1.要素と要素(XAML、コード)
1.1 XAML形式
ターゲット属性="{Binding ElementName=ソースコントロール、Path=ソース属性、Mode=...}"
1.2コード:
         Binding binding = new Binding();           binding.Source=ソースコントロール           binding.Path = new PropertyPath("Value");//ソースコントロール属性binding.Mode = BindingMode.TwoWay;           lblSampleText.SetBinding(TextBlock.FontSize, binding); バインディング.
1.3プレゼンテーション...
二.非要素オブジェクト(Source/RelativeSource/DataContext)にバインドします.
     1.Source
1.1静的オブジェクトへのバインド
FontSize="{Binding Source={x:Static静的オブジェクト},
Path=静的オブジェクトのプロパティ}
または、Title="{x:Staticネーミングスペース:静的クラス.属性}"
1.2リソースにバインドされます.
FontFamily="{Binding Source={StaticResourceリソース名},
Path=リソースオブジェクトのプロパティ}"
プレゼンテーションの例...
     2.RelativeSource:現在のオブジェクトに基づいて、ソースを自動的に検索してバインドします.
        2.1  ="{Binding RelativeSource=
                       {RelativeSource Mode=FindAncestor,
                                             AncestorType={x:Type Window}},
                         Path=Title}"
2.2 RelativeSourceMode列挙値
名前
説明
Self
式は、同じ要素の別の属性にバインドされます(10章では、コマンドに関連付けられたテキストをトリガコマンドのコントロールに表示する技術の一例について説明します).
FindAncestor
式は親要素にバインドされます.WPFは、所望の親要素が発見されるまで要素ツリーを検索します.親エレメントを指定するには、検索する親エレメントのタイプを示すAncestorTypeプロパティも設定する必要があります.また、AncestorLevelプロパティを使用して、検出された特定の要素の数を省略することもできます.たとえば、1本のツリーで検索する場合、3番目のListBoxItemタイプの要素にバインドする場合は、AncestorType={x:Type ListBoxItem}と、AncestorLevel=3の設定を行う必要があります.したがって、前の2つのListBoxItem要素は省略されます.既定では、AncestorLevelプロパティは1に設定され、最初に一致する要素が見つかったときに検索を停止します.
PreviousData
式は、データ・バインディング・リストの前のデータ・アイテムにバインドされます.このモードは、リスト・アイテムで使用されます.
TemplateParent
式はテンプレートを適用する要素にバインドされます.このモードは、バインドがコントロールテンプレートまたはデータテンプレートの内部にある場合にのみ動作します.
     3.DataContext
すべてのサブオブジェクトは、バインドソースを共有できます.
親=DataContext="{Binding ElementName=wndBindingType}"
サブオブジェクト=FontSize="{Binding Path=バインド元の属性}"
三.バインドされた方向
BindingMode列挙値
名前
説明
OneWay
ソース属性が変化するとターゲット属性が更新されます
TwoWay
ソース属性が変化するとターゲット属性が更新され、ターゲット属性が変化するとソース属性が更新されます.
OneTime
最初に、ソース属性値に基づいてターゲット属性を設定します.ただし、この章で説明するように、バインドがまったく異なるオブジェクトに設定されているか、BindingExpression.UpdateTarget()メソッドが呼び出されていない限り、その後のすべての変更は無視されます.通常、ソース属性が変化しないことを知っている場合は、このモードを使用してオーバーヘッドを低減できます.
OneWayToSource
OnWayタイプと似ていますが、方向が逆です.ターゲット属性が変化すると、ソース属性が更新されます(これは後方に渡されるように見えますが)、ターゲット属性は更新されません.
Default
このタイプのバインドはターゲット属性に依存します.これは、双方向(TextBox.Textプロパティなど、ユーザーが設定できるプロパティ)でも、一方向(他のすべてのプロパティ)でもよい.他のモードが明示的に指定されていない限り、すべてのバインドはこのモードを使用します.
方向:
clip_image001
図16-5 2つの属性の異なる方向をバインドする
     5.重要クラス
5.1 BindingOperations:バインディングの明確化、バインディングの設定、バインディング式の取得
5.2 BindingExpression:UpdateSource()メソッドとUpdateTarget()メソッド.
             5.2.1取得
行番号を隠す?これはプログラムコードです.
// Get the binding that's applied to the text box.  

  • BindingExpression binding = txtFontSize.GetBindingExpression(TextBox.TextProperty);   
    
    
  • // Update the linked source (the TextBlock).  
    
    
  • binding.UpdateSource(); 
    
    


  • 5.3「x:Static」は、対象オブジェクトのタイプに応じて、静的オブジェクト、属性から値をとります.戻り値:オブジェクト/数値.
            
         6.まとめ:
    属性値変更の実装が必要:INotifyPropertyChanged
    コレクション変更(削除の追加)実装が必要:INotify CollectionChanged
    要素から要素へのバインドは依存する属性に依存し、依存する属性を登録する際の属性値変更通知.
    四.カスタムクラス
         1.実装の更新
    1.1属性依存属性
             1.2INotifyPropertyChanged
    五集合バインド
    ItemsControlクラスでデータバインディングに使用されるプロパティ(IEnumerableインタフェースをサポートすることが唯一の要件です)
    名前
    説明
    ItemsSource
    リストに表示されるすべてのオブジェクトを含むコレクションを指します.
    DisplayMemberPath
    各アイテムに表示テキストを作成するプロパティを識別します.
    ItemTemplate
    各アイテムのビジュアル化された外観を作成するためのデータテンプレートを受け入れます.この属性はDisplayMemberPath属性よりも強力で、
    ItemsControl(ListBoxコントロール、ComboBoxコントロール、ListViewコントロール(およびMenuコントロール、階層化データを表示するTreeViewコントロール))
     
    二.値変換器.
    IValueConverterインタフェースのクラス
    clip_image001[1]
    バインドされたデータの変換
     
     
     
     
     
     
    三.データテンプレートの使用
    データ・テンプレートは、通常、DataTemplateのタイプのプロパティを満たすために、次のコントロールに適用されます.
    ・コンテンツコントロール(Content Control):ContentTemplate属性、Contentの表示制御
    ・アイテムコントロール(Items Control):表示されるアイテムごとに適用されるItemTemplateプロパティ
    ・ヘッドコントロール(Header Content Control):HeaderTemplate属性で、Headerの表示を制御します.
    四.表示
         1.フィルタリング
         2.ツールバーの
         3.グループ化
    五.データプロバイダ
        1.インスタンスにバインド
        1.ObjectDataProviderは、関数バンドパラメータを構築するオブジェクトをバインドできます.
        2.メソッドにバインド可能
     

     
                23