[wpf] 다양한 WPF 바인딩 모드는 무엇입니까?

다음과 같은 WPF의 다양한 데이터 바인딩 모드를 이해하지 못합니다.

  • 일방 통행
  • 양방향
  • 한 번
  • 기타…

각 모드는 무엇을 의미합니까?

언제 사용해야합니까?



답변

  • OneWay: 바인딩 된 속성이 사용자 인터페이스를 업데이트 할 때 사용합니다.
  • TwoWay: 이것은 동일한 동작을 OneWay가지며 OneWayToSource결합됩니다. 바인딩 된 속성은 사용자 인터페이스를 업데이트하고 사용자 인터페이스의 변경 사항은 바인딩 된 속성을 업데이트합니다 ( 예 : a TextBox또는 a 와 함께 사용 Checkbox).
  • OneTime: 이것은 OneWay사용자 인터페이스를 한 번만 업데이트한다는 점 을 제외 하면 동일한 동작을 합니다. 이것은 바인딩에 대한 기본 선택이어야합니다 (다양한 이유로 여기서 자세히 설명하지 않겠습니다). 실제로 추가 기능이 필요한 경우에만 다른 유형의 바인딩을 사용해야합니다.
  • OneWayToSource: 이것은 반대 OneWay-사용자 인터페이스 값 변경은 바인딩 된 속성을 업데이트합니다.

아무것도 지정하지 않으면 사용중인 컨트롤에 따라 동작이 달라집니다.

자세한 내용 BindingMode은 MSDN의 열거 형을 참조하십시오 .


답변

바인딩은 다음 두 항목으로 구성됩니다.

  1. 소스 (일반적으로 MVVM 시나리오의 ViewModel)
  2. 타겟 (UI 컨트롤)

대상은 DependencyObject(바인딩이 작동하기 위해)이어야하며 소스는 a DependencyObject이거나 변경되는 WPF 바인딩 시스템을 모방하는 메커니즘이 있어야합니다 ( INotifyPropetyChnaged인터페이스 구현).


MVVM은 ViewModel 프로젝트가 View 관련 참조에서 자유로울 것을 권장하므로 INotifyPropertyChanged인터페이스를 사용하여 WPF 바인딩에 의해 수신되는 Source 개체를 만드는 것이 좋습니다 . 바인딩은 Source 속성과 Target 속성간에 발생합니다 (이어야 함 DependencyProperty). 예를 들면 TextPropertyTextBox클래스 (예를 들어)에 바인딩 인 UserName뷰 모델의 속성입니다. WPF 바인딩은 네 가지 유형의 바인딩을 제공합니다. 바인딩은 달리 실행하도록 지정하지 않는 한 UI 스레드에서 실행됩니다.

  1. OneWay : 대상 속성 은 변경되는 소스 속성을 수신하고 자체적으로 업데이트합니다. 프로그래밍 방식으로 ViewwModel의 UserName속성을 변경 하면 텍스트 상자에 반영됩니다. 바인딩 시스템 이 변경 사항에 대해 Source 만 감시하므로 이는 중간 비용 입니다.
  2. TwoWay : 대상 속성은 변경되는 소스 속성을 수신하고 자체적으로 업데이트합니다. AND 소스 속성은 변경되는 대상 속성을 수신하고 자체적으로 업데이트됩니다. TextPropertyUserName속성은 모두 동기화 된 상태로 유지되며 하나가 변경되면 서로 업데이트됩니다. 바인딩 시스템이 양쪽의 변화를 지켜봐야하기 때문에 이것은 가장 비용이 많이 듭니다.
  3. OneWayToSource : 대상 속성이 변경되면 Source 속성이 변경됩니다. 사용자가 변경하는 경우 TextPropertyUserName속성이 변경된 값을 차지합니다. 바인딩 시스템이 Target 만 변경 사항을 감시하므로 이는 다시 중간 비용 입니다.
  4. OneTime : Binding 수명 동안 한 번만 발생하며 Binding이 발생하면 Target 속성이 Source 속성 으로 업데이트됩니다 . 이것은 최소 비용이며 예를 표시하는 정적 데이터를 시나리오에 적당하다 Label, TextBlock

아무것도 언급하지 않으면 모든 대상 속성에는 자신과 관련된 기본 바인딩 모드가 있습니다. 예를 들어, TextPropertyTextBox기본 바인딩 모드는 TwoWay. 를 들어 TextProperty(A)의 TextBlock그것은 하나의 방법입니다.

특히 UI에 많은 수의 컨트롤이있는 경우 애플리케이션 지연 시간을 줄이는 데 도움이 될 수 있으므로 올바른 모드를 선택하는 것이 좋습니다.

MVVM에 대한 자세한 내용은 여기 내가 쓴 기사입니다.


답변