-
Binding웹 서버/Blazor 입문 2022. 4. 25. 20:21
1. 한방향 바인딩
Blazor에서 바인딩은 html코드와 C#코드를 연동하는 행위를 뜻한다.
우선 Pages폴더 내에 Binding.razor 파일을 생성해준다.
Binding.razor
@page "/bingding" <h3>Binding</h3> <p>Value : @_value</p> @code { int _value = 15; }
@code부분에서 C#코드 등을 정의하고 그 외에는 HTML코드이다.
그리고 '@'의 뜻은 C#과 관련된 코드라는 뜻이다. 그리고 위의 코드에서 @_value는 @code에 정의되어있는 _value의 변수를 가져온다는 뜻이다.
NevMenu.razor
<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>
그리고 NevMenu.razor는 미리 생성된 파일인데 위의 코드를 추가해준다.
실행결과.
NevMenu.razor를 통해 sidebar에 Binding이라는 메뉴가 추가되었고. Binding.razor에서 표현한 내용들이 출력되었음을 확인할 수 있다.
이렇듯, C#코드에서 HTML로 하는 바인딩을 한방향 바인딩이라고 한다.
2. 양방향 바인딩
반대로 HTML에서 C#으로 가는 코드도 작성할 수 있다.
@page "/binding" <h3>Binding</h3> <p>Value : @_value</p> <input type="range" step="1" @bind-value ="_value"/> @code { int _value = 15; }
빨간색으로 그어놓은 부분에 슬라이드바가 생겼는데 슬라이드 바를 이용해서 _value의 값을 조정할 수 있다.
이렇게 C#->HTML, HTML->C#으로 가는 코드를 양방향 바인딩이라고 한다.
3. 바인딩 실습
User.razor
@page "/user" @using BlazorApp.Data <h3>Online User</h3> <p> Users: <b>@_users.Count()</b> </p> <br /> <ul class="list-group"> @foreach(UserData user in _users) { <li @key="user" class="list-group-item"> <button type="button" class="btn btn-link" @onclick="(()=>KickUser(user))">ban</button> <label>@user.Name</label> </li> } </ul> <br /> <div class="container"> <div class="row"> <div class="col"> <input class="form-control" placeholder="Add User" @bind-value="_inputName" /> </div> <div class="col"> <button class="btn btn-primary" type="button" @onclick="AddUser">Add a User</button> </div> </div> </div> @code { List<UserData> _users = new List<UserData>(); string _inputName; protected override void OnInitialized() // User에 접근해서 페이지를 열면 초기화되는 함수 { _users.Add(new UserData() { Name = "Rookiss" }); _users.Add(new UserData() { Name = "Faker" }); _users.Add(new UserData() { Name = "Deft" }); } void AddUser() { _users.Add(new UserData() { Name = _inputName }); _inputName = ""; } void KickUser(UserData user) // 인자가 있는 함수는 람다식으로 간접호출하는 식으로 써야함. { _users.Remove(user); } }
Add a User버튼을 통해서 유저목록을 추가할 수 있고, ban버튼을 누르면 유저가 삭제되는 코드이다.
4. 속성 바인딩
<button class="@_btnClass" type="button" @onclick="AddUser" disabled="@(_users.Count() >= 5)"> Add a User</button>
위의 코드를 C#코드를 이용해서 class부분에 바인딩을 시켜줄 수 있다.
참고로 disabled는 버튼 비활성화 기능인데 속성 바인딩을 이용해서 조건을 걸어주었다.(조건식을 통해 true, false값이 반환된다.)
<button class="@_btnClass" type="button" @onclick="AddUser">Add a User</button> @code { string _btnClass = "btn btn-primary"; void RefreshButton() // 유저수가 홀수짝수에 따라 버튼색이 바뀜 { if (_users.Count % 2 == 0) _btnClass = "btn btn-primary"; else _btnClass = "btn btn-secondary"; } }
참고로
StateHasChange();
라는 함수를 넣어주면 화면이 최신상태로 랜더링이 된다.
'웹 서버 > Blazor 입문' 카테고리의 다른 글
Templated Component (0) 2022.05.20 Cascading Parameter (0) 2022.05.19 Parameter, Ref, EventCallback (0) 2022.04.27