C#에서 인터페이스에 나타나는 값을 동적으로 표현할때 데이터바인딩을 사용한다.
<Window.DataContext>
<local:ViewModel/>
</Window.DataContext>
XAML의 내용이 <TEXTBOX TEXT={BINDING name MODE=~~~}></TEXTBLOCK> 이렇게 선언하면
TEXTBOX안에 표시되는 내용이 ViewModel이라는 뷰모델 클래스의 name이라는 요소와 연결되게 된다.
여기서 설정하는 MODE는 onetime, oneway, twoway, onewaytosource 중에 하나로 설정하는데,
-onetime
만약에 현재 뷰모델의 name이라는 요소가 string타입의 "사과"라고 저장되어 있다고 하자.
만약 MODE를 onetime으로 연결 한다면, 인터페이스의 텍스트블록 안에 "사과"라는 글자가 뜨게 된다.
하지만, 이때 단 한번만 바인딩이 되고 이후로는 연결이 끊어지게 되서
뷰모델 안의 string name을 바꿔도 텍스트 박스의 값이 영향을 받지 않고
텍스트박스안에 "바나나"를 입력해도 뷰모델의 name은 바뀌지 않는다.
-oneway
MODE가 oneway라면 이는 소스의 값 -> 인터페이스의 값 한 방향으로만 바인딩을 허용한다는 것이다.
뷰모델의 string이 "바나나"로 변하면, 텍스트박스의 값도 "바나나"로 바뀔 것이다.
그러나, 텍스트박스에 내가 "수박"을 입력해도 뷰모델의 "바나나"는 "수박"으로 바뀌지 않는다.
-twoway
위에 두 가지를 이해했다면, twoway는 따로 설명 할 필요도 없을 것 같다.
텍스트 박스의 값을 바꾸면 소스의 값도 바뀌고, 소스의 값을 바꾸면 텍스트박스의 값도 바뀌는 양 방향 바인딩이다.
-onewaytosource
oneway의 정 반대라고 보면 된다.
인터페이스 -> 소스 방향의 oneway라고 생각하면 된다.
'C#, C++' 카테고리의 다른 글
c#을 이용한 TCP/IP 서버-클라이언트 소켓(Socket)통신 (1) | 2022.02.15 |
---|---|
WPF ItemsControl을 이용해서 UIelement를 반복해서 표현하는 방법(xaml에서 for문, foreach문을 대신해서 사용할 수 있는 방법) (0) | 2021.11.08 |
C# 제네릭 <generic> (0) | 2021.08.12 |