4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Blazor WebAssembly 部品コンポーネントへ渡した変数とのバインド

Last updated at Posted at 2021-09-12

#はじめに
この記事は部品コンポーネントへ変数を渡し、部品コンポーネントの中で渡された変数が変更された際、渡し元の変数も自動的に変更させる事を実現するまでの記事です。

#準備
以下のように、ボタンを押したら渡された変数の文字列が変更されるだけの部品コンポーネントを作りました。

部品コンポーネント

<h3>Component1</h3>

<p>部品コンポーネント内の値 : @Test1</p>
<button @onclick="ButtonOnClick">クリック</button>

@code {
    [Parameter]
    public string Test1 { get; set; }

    private void ButtonOnClick()
    {
        Test1 = "ボタンが押されました。";
    }
}

呼び出し元

@page "/test"

<p>呼び出し元の値 : @Test1</p>
<Component1 Test1=@Test1/>

@code {
    private string Test1 { get; set; } = "ボタン押される前の文字列";
}

動き
ボタンを押しても呼び出し元の変数の値は変わっていない
4.gif

#呼び出し元の変数の値の変更方法
部品コンポーネント側で、バインドしたい変数のEventCallbackを追加する。この時の変数名の名前は〇〇〇Changedとする必要がある。(今回はTest1の変数をバインドしたいためTest1Changedとしている。)

Test1の値が変更されるタイミングでTest1Changedを実行する事で、呼び出し元の変数も自動で変わってくれる。

また、呼び出し元もバインドしたい変数に@bind-をつける必要がある。

部品コンポーネント

<h3>Component1</h3>

<p>部品コンポーネント内の値 : @Test1</p>
<button @onclick="ButtonOnClickAsync">クリック</button>

@code {
    [Parameter]
    public string Test1 { get; set; }
    [Parameter]
    public EventCallback<string> Test1Changed { get; set; }

    private async Task ButtonOnClickAsync()
    {
        Test1 = "ボタンが押されました。";
        await Test1Changed.InvokeAsync(Test1);
    }
}   

呼び出し元

@page "/test"

<p>呼び出し元の値 : @Test1</p>
<Component1 @bind-Test1=@Test1>
</Component1>

@code {
    private string Test1 { get; set; } = "ボタン押される前の文字列";
}

動き
渡し元の変数も変わっている。
5.gif


[Blazor関連のリンク] [Blazor WebAssembly プロジェクト作成(認証あり)](https://qiita.com/pero_88/items/be142d5d0ba92e5c91d0) [Blazor WebAssembly 初期プロジェクト構成の入門](https://qiita.com/pero_88/items/ced1028ad536a43fec1d) [Blazor WebAssembly Postgresを使うまで](https://qiita.com/pero_88/items/23e88a1d2bc3659b9946) [Blazor WebAssembly コードビハインド](https://qiita.com/pero_88/items/be871f4ac63868f048f0) [Blazor WebAssembly InputSelectの使い方](https://qiita.com/pero_88/items/3eddcd1aedf8bbc8441b) [Blazor WebAssembly 部品コンポーネントへ渡した変数とのバインド](https://qiita.com/pero_88/items/f5d70b41337ca6d08dd1) [Asp.net core Identity 翻訳開始まで](https://qiita.com/pero_88/items/44a66b7ac217f674a7f3) [Blazor WebAssembly 使いまわしが利く部品(表)を作る。](https://qiita.com/pero_88/items/5e1e3f68d50d941ee36a)
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?