C# の基本の復習 (パート 4/4)

第9章 データバインディング

9.1 データバインディングの基本概念

WPF は、Binding、MultiBinding、PriorityBinding の 3 つのデータ バインディング テクノロジを提供します。

これら 3 つの Binding の基本クラスは BindingBase であり、BindingBase は MarkupExtension を継承します。

WPF では、ContentControl (Button など) と ItemsControl (ListBox や ListView など) の両方が、単一のデータ項目またはデータ項目のコレクションの柔軟なデータ バインディングを可能にし、並べ替え、フィルター処理、およびグループ化されたデータを生成できる組み込み関数を提供します。意見

System.Windows.Data.Binding类:

**"target" の追加プロパティをデータ "source" のプロパティにバインドします。これは public 修飾子を持つ任意のプロパティにすることができます。

バインディング構文:

<object property="{Binding  declaration}" .../>
//object为绑定目标;declaration为绑定声明,如果有多个绑定声明,各绑定声明之间用逗号分隔
<Slider Name="slide1" Maximum="100" />
<TextBlock Text="{Binding ElementName=slide1,Path=Value}" />

9.1.1 バインディングとバインディング式

バインドとは、「ターゲット」の依存関係プロパティを「ソース」の CLR プロパティにバインドすることを指します。

ここに画像の説明を挿入

BindingExpression は、バインディング ソースとバインディング ターゲット間の接続を維持する基本オブジェクトです。Binding インスタンスには複数の BindingExpression インスタンスを含めることができます。

9.1.2 バインディングモード(Modeプロパティ)

1. OneWay: 一方向バインディング

機能: ソースが変更されると、ターゲットも自動的に変更されます。これは、バインドされたコントロールが暗黙的な読み取り専用コントロール (学生番号など) である場合、またはターゲット プロパティに変更用のコントロール インターフェイスがない場合に適しています。 (テーブルの背景色など)

 <TextBlock
       Text="{Binding ElementName=listBox1,
       Path=SelectedItem.Content, Mode=OneWay}"/>

2. TwoWay: 双方向バインディング

機能: ソースまたはターゲットの一方が変更されると、他方も自動的に変更され、編集可能またはインタラクティブな UI スキームに適しています。

 <TextBox Text="{Binding ElementName=listBox2,
                      Path=SelectedItem.Content,
                      Mode=TwoWay,
                      UpdateSourceTrigger=PropertyChanged}" />

3. ワンタイム: シングルバインディング

特徴: ターゲットは、アプリケーションの起動時またはデータ コンテキスト (DataContext) の変更時にのみ更新され、その後はソースの変更はターゲットに影響を与えなくなり、静的データのバインドに適しており、本質的にはOneWay バインディングの簡略化された形式です

 <TextBox Text="{Binding ElementName=listBox3, 
                   Path=SelectedItem.Content,
                   Mode=OneTime}" />

4. OneWayToSource: 逆バインディング

特徴: ターゲットが変更されると、ソースも変更されます。これは、OneWay バインディングの逆です。

<TextBox Text="{Binding ElementName=listBox4, 
            Path=SelectedItem.Content,
           Mode=OneWayToSource,
           UpdateSourceTrigger=PropertyChanged}" />

5. デフォルト:ターゲット属性のデフォルトのモード値を自動的に取得します。

バインド モードが宣言されていない場合、デフォルトは [デフォルト] です。一般に、編集可能なコントロール プロパティ (テキスト ボックスやチェック ボックスのプロパティなど) はデフォルトで双方向バインディングに設定されますが、他のほとんどのプロパティはデフォルトで一方向バインディングに設定されます。

 <TextBox Text="{Binding ElementName=listBox2,
                   Path=SelectedItem.Content,
                   Mode=Default,
                   UpdateSourceTrigger=LostFocus}" />

9.1.3 ソースをいつ更新するかを制御する (UpdateSourceTrigger)

  • 明示的: BindingExpression の UpdateSource メソッドが C# コードで呼び出された場合にのみソースが更新されます。

  • LostFocus: ターゲット コントロールがフォーカスを失ったときにソースを自動的に更新します。

  • PropertyChanged: ターゲット コントロールのバインドされたプロパティが変更されるたびに、ソースが自動的に更新されます。

<TextBox Text="{Binding ElementName=listBox2,
                   Path=SelectedItem.Content,
                   Mode=TwoWay,
                   UpdateSourceTrigger=PropertyChanged}" />

9.1.4 バインディングパス構文(Pathプロパティ)

(1) Path の値はソース オブジェクトの属性名です (一般的に使用されます。この章の例)
(2) Path 値のその他のケース:

(a) 添付プロパティにバインドする場合は、それを括弧で囲む必要があります。
(b) 角括弧を使用してプロパティ インデクサーを指定します。また、ネストされたインデクサーを使用することもできます。
(c) インデクサー内では、複数のインデクサー パラメーターをカンマで区切って使用できます。また、括弧を使用して各パラメーターの型を指定することもできます (d ) ソースがコレクション ビューの場合は、スラッシュ (/) を使用できます
。現在の項目
(e) は、ドット (.) パスを使用して現在のソースにバインドできます。

9.1.5 データ変換

XAML でデータ バインディングを記述する場合、WPF は一部の型の値を文字列表現に変換する型コンバーターを提供します。ただし、場合によっては、開発者がコンバータをカスタマイズする必要がある場合があります。

たとえば、バインディングのソース オブジェクトが DateTime 型のプロパティである場合、バインディングが適切に機能するには、最初にプロパティ値をカスタム文字列表現に変換する必要があります。

コンバーターをバインディングに関連付けるには、通常、IValueConverter インターフェイスを実装するクラスを作成し、Convert メソッドと ConvertBack メソッドの 2 つのメソッドを実装します。

9.2 単純なデータバインディング

9.2.1 単一のプロパティでバインディング ソースを直接指定する

ElementName: ソースは別の WPF 要素です

<Slider Name="slide1" Width="100" Maximum="100" />
<Rectangle Width="{Binding ElementName=slide1,Path=Value}" Height="15" Fill="Red" />

ソース: ソースは CLR オブジェクトです

<Page …… xmlns:src="clr-namespace:ch11.Examples">
<TextBlock Text="{Binding XueHao,
           Source={StaticResource info}}" />

Source を使用して CLR オブジェクトにバインドする

Binding クラスの Source 属性は、バインドされたデータ ソースが CLR オブジェクトであることを示します。CLR オブジェクトは、.NET Framework によって提供されるクラスのインスタンスまたはカスタム クラスのインスタンスにすることができます。

RelativeSource を使用した相対ターゲットのバインド

RelativeSource: ソースとターゲットは同じ要素です

RelativeSource は、「ソース」がそれ自体であることを示します。RelativeSource プロパティは、オブジェクトのプロパティをそれ自体の別のプロパティにバインドする場合、またはスタイル (Style) またはテンプレート (ControlTemplate) でデータ バインディングを使用する場合に便利です。

<Rectangle Width="100"
   Height="{Binding RelativeSource={RelativeSource Self},
   Path=Width}" />

9.2.2 DataContext を介して複数のプロパティを同じソースにバインドする

(1) DataContext を親要素で 1 回宣言するだけで済みます。
(2) 各子要素の「Bingding Path=...」は「Bingding ...」のように省略できます。

第 10 章 データベースとエンティティ データ モデル

10.1 データベースとテーブルの作成

10.1.1 ADO.NET データ アクセス テクノロジ

1. DataSet を使用してデータベースにアクセスします

これは、ADO.NET が最初に提供された技術であり、ローカル メモリに常駐する DataSet を中間層として使用し、アプリケーション プログラムと対話する非接続モードでデータを処理するために使用されます。 DataSet、および DataSet その後、データベースと対話します

2. LINQ to DataSet を使用してデータベースにアクセスします

この方法では、アプリケーションはLINQ 構文を使用してDataSet にアクセスできます。これは最初の方法よりも柔軟で簡単です。

3. LINQ to SQL を使用してデータベースにアクセスする

このメソッドは SQL Server データベースと直接対話し、高い実行効率と高速性を実現しますが、このメソッドは他のタイプのデータベースをサポートしません。LINQ to SQL では、最初に O/R デザイナーを使用してモデルを構築し、次にLINQ 構文を使用して SQL ステートメントを渡し、SQL コマンドを実行し、SQL Server に直接アクセスするためのモデル

このテクノロジを使用する場合は、通常、カスタムの中間レベルのオブジェクト モデル (ミドルウェア) を設計し、それを他のアプリケーションが呼び出すための .dll ファイルに作成するために使用されます。

4. EF および LINQ to Entities を使用してデータベースにアクセスします (推奨方法)

これは推奨されるデータベース アクセス方法です。このモデルはさまざまな種類のデータベース (SQL Server、Oracle、DB2、MySQL など) をサポートでき、このモデルのデータベース アクセス エンジンはデータベース サプライヤーから直接提供できます。

10.1.2 SQL Server 2014 の概要

SQL Server 2014 データベース エンジンの主な機能:

(1) オペレーティング システムのアップグレードのための AlwaysOn 可用性グループのクラスター間移行を提供
(2) プログラマビリティの強化
(3) スケーラビリティとパフォーマンスの強化
(4) クラウド コンピューティングとビッグ データのサポートのサポートを提供

10.1.3 LocalDB データベースの作成

LocalDB の紹介:サービスベースのデータベースですが、ローカルでのみアクセス可能です

長所: 使いやすく、プロジェクトやデータベースをあるコンピュータから別のコンピュータにコピーする際に変更を加える必要はありません。

アプリケーションを通じて LocalDB データベースにアクセスすると、VS2015 はLocalDB のデフォルト インスタンスに.mdf ファイルを自動的に添付します。データベースが使用されなくなった場合、LocalDB は.mdfファイルをデフォルト インスタンスから自動的に分離します。

VS でデータベースを直接作成する基本的な使用法:

方法 1 : [サービスベースのデータベース] を選択してデータベース (MyDb.mdf) を直接作成します

ここに画像の説明を挿入

方法 2 :

(1) [ADO.NET Entity Data Model]を選択します。

ここに画像の説明を挿入

(2) [データベースからCode First]を選択します。

ここに画像の説明を挿入

ここに画像の説明を挿入

10.2 Entity Frameworkを使用したEntity Data Modelの作成

10.2.1 エンティティフレームワークの基本概念

ここに画像の説明を挿入

Entity Framework の利点:

(1) アプリケーションは、継承を持つ型、複雑なメンバー、および関係を含む概念モデルを介して動作できる(2) アプリケーション
、特定のデータ エンジンまたはストレージに対するハードコーディングされた依存関係を持たなくなる(4) 開発者は、さまざまなストレージ スキーマ (異なるデータベース管理システムに実装される可能性があります) にマッピングされる一貫したアプリケーションを使用できます。(5) 複数の概念モデルを同じストレージ アーキテクチャにマッピングできます。


10.2.2 Entity Frameworkの開発パターン

ここに画像の説明を挿入

1. データベースファースト

最初にデータベースを作成してから、データベースに応じて対応するエンティティ データ モデル(.edmx ファイル) を手動で生成します。データベースの構造が変更された場合は、モデルを手動で再度生成する必要があります

2. モデルファースト

まず、開発ツールが提供するテンプレートを使用してエンティティ データ モデル (.edmx ファイル) を作成し、次にエンティティ データ モデルに基づいてデータベースを生成します。

3. Code First (Code First、推奨手法)

[実際]最初にデータ モデル クラスを記述し、それに応じてデータベースを生成します

[参考] データベースを作成してからエンティティデータモデルクラスを生成する このメソッドはリファレンスコードの生成のみに使用されます

この記事が役に立った場合は、ワンクリックと 3 つのリンクでサポートしてください~

おすすめ

転載: blog.csdn.net/qq_50587771/article/details/122923088