「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.08.25
XML
カテゴリ: WPFC#.NET


`Text="{Binding}"` と記載した場合、データバインディングは現在のデータコンテキスト(`DataContext`)にバインドされます。具体的には、バインディングターゲット(この場合は `Text` プロパティ)が現在の `DataContext` 全体にバインドされます。データコンテキストは通常、ビューモデルのインスタンスを指しますが、任意のオブジェクトである可能性もあります。


以下は `Text="{Binding}"` が何を意味するのかを詳細に説明します。




`Text="{Binding}"` と書かれているとき、それはそのコントロール(例えば `TextBlock` や `TextBox`)が現在の `DataContext` の `ToString()` メソッドの結果を `Text` プロパティに表示することを意味します。これは、デフォルトのバインディングモードです。例えば、`DataContext` が文字列の場合、その文字列が表示されます。


### 2. オブジェクト全体を表示する


`DataContext` がオブジェクトの場合、そのオブジェクトの `ToString()` メソッドが呼び出され、結果が `Text` プロパティに表示されます。デフォルトでは、オブジェクトのクラス名が返されるため、カスタムクラスで意味のある文字列を表示したい場合は `ToString()` メソッドをオーバーライドする必要があります。


### 3. プロパティ指定がない場合の動作


プロパティ名を指定せずに `{Binding}` と記載した場合、バインディングシステムは現在のデータコンテキスト自体をターゲットとして扱います。通常、特定のプロパティをバインドするためには `{Binding プロパティ名}` という形式で指定しますが、単に `{Binding}` とすることでデータコンテキスト全体にバインドできます。


### 具体例


以下に具体的な例を挙げます。


#### 例1: `DataContext` が文字列の場合


```csharp

// DataContext を "Hello, World!" に設定

this.DataContext = "Hello, World!";

```


```xml

<TextBlock Text="{Binding}" />

```


この場合、`TextBlock` の `Text` プロパティには `Hello, World!` が表示されます。なぜなら、`DataContext` が直接文字列であり、その文字列自体が表示されるからです。


#### 例2: `DataContext` がオブジェクトの場合


```csharp

// データコンテキストにカスタムオブジェクトを設定

public class Person

{

    public string Name { get; set; }

    public override string ToString()

    {

        return $"Name: {Name}";

    }

}


this.DataContext = new Person { Name = "Alice" };

```


```xml

<TextBlock Text="{Binding}" />

```


この場合、`TextBlock` の `Text` プロパティには `Name: Alice` と表示されます。ここでは `ToString()` メソッドが呼び出され、その結果が表示されるためです。


### まとめ


- `Text="{Binding}"` は、現在の `DataContext` 全体にバインドされます。

- `DataContext` がプリミティブな値(例えば、文字列や数値)の場合、その値が表示されます。

- `DataContext` がオブジェクトの場合、そのオブジェクトの `ToString()` メソッドが呼び出され、結果が表示されます。


このように、`Text="{Binding}"` はデータコンテキスト全体を扱い、特定のプロパティを指定しない場合に使用されます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.08.25 21:00:09


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: