Home [Blazor] Binding
Post
Cancel

[Blazor] Binding

Blazer 프로젝트 생성

Blazor Server 형식으로 만들경우
Visual Studio에서 ‘Blazor 앱 > Blazor 서버 앱’을 선택해 생성하면 된다.

Razor Component(.razor)

Blazor는 Razor Component들로 이루어져 있으며 생성방법은
‘새 항목 추가 > Razor 구성 요소’를 선택해 생성하면 된다.

Razor Component(.razor) 파일은 C#와 HTML 태그들을 사용해 구현된다.

기본적으로 맨 위에는 필요한 선언문들이 들어가고, 중앙에는 C#과 혼합된 HTML 태그들이, 맨 아래 @code { } 부분은 전형적인 C#코드가 들어간다.

ex) FetchData.razor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@page "/fetchdata"

@using BlazorApp.Data
@inject WeatherForecastService ForecastService

<h1>Weather forecast</h1>

<p>This component demonstrates fetching data from a service.</p>

@if (forecasts == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Date</th>
                <th>Temp. (C)</th>
                <th>Temp. (F)</th>
                <th>Summary</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var forecast in forecasts)
            {
                <tr>
                    <td>@forecast.Date.ToShortDateString()</td>
                    <td>@forecast.TemperatureC</td>
                    <td>@forecast.TemperatureF</td>
                    <td>@forecast.Summary</td>
                </tr>
            }
        </tbody>
    </table>
}

@code {
    private WeatherForecast[] forecasts;

    protected override async Task OnInitializedAsync()
    {
        forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
    }
}

Binding

테스트를 위해 Pages 폴더에 Binding.razor라는 이름으로 Razor Component를 생성하고 아래와 같이 작성해본다.

Binding.razor

1
2
3
4
5
6
7
8
9
@page "/binding"

<h3>Binding</h3>

<p>Value : @_value</p>

@code {
    int _value = 15;
}

Razor Component 파일에서는 ‘@page’를 사용해 라우팅 경로를 설정해줄 수 있다.

‘@변수이름’ 형식으로 작성하면 실제 선언되어 있는 변수와 바인딩을 해주어 현재 변수에 저장되어 있는 값을 불러온다.

필요한 변수와 함수는 아래 @code { }안에 C#으로 구현하면 된다.

값이 잘 출력되는지 테스트해보기 위해 Shared 폴더에 NavMenu.razor 파일로 가 메뉴를 추가해본다.

NavMenu.razor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<div class="top-row pl-4 navbar navbar-dark">
    <a class="navbar-brand" href="">BlazorApp</a>
    <button class="navbar-toggler" @onclick="ToggleNavMenu">
        <span class="navbar-toggler-icon"></span>
    </button>
</div>

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </li>
        @* 메뉴 추가 *@
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="binding">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Binding
            </NavLink>
        </li>
    </ul>
</div>

@code {
    private bool collapseNavMenu = true;

    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
}

다른 메뉴 구문을 복사해 href 경로와 이름만 수정해주었다.

실행시켜보면 좌측 사이드바에 Binding이라는 메뉴가 생겼고 눌러보면 _value 값이 잘 출력된 모습을 볼 수 있다.

Binding1 Binding

방금은 값을 불러오는 쪽으로 바인딩을 하였지만 반대로도 가능하다.

1
2
3
4
5
6
7
8
9
10
@page "/binding"

<h3>Binding</h3>

<p>Value : @_value</p>
<input type="range" step="1" @bind-value="_value" />

@code {
    int _value = 15;
}

<input> 태그에서 @bind-value 속성을 이용해 _value와 바인딩해주고 있다.

실행시켜보면 range를 만질때마다 _value 값이 달라지는 것을 볼 수 있다.

Binding2 Binding

참고로 지금은 마우스를 때야 값이 변하는데 이부분은 옵션을 추가해 설정해줄 수 있다.

1
2
3
4
5
6
7
8
9
10
@page "/binding"

<h3>Binding</h3>

<p>Value : @_value</p>
<input type="range" step="1" @bind-value="_value" @bind-value:event="oninput"/>

@code {
    int _value = 15;
}

<input> 태그에 @bind-value:event 속성을 추가해 “oninput”이라고 설정해둔다.
그러면 마우스를 때지않아도 실시간으로 값이 변하는 모습을 볼 수 있다.

This post is licensed under CC BY 4.0 by the author.