Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross는 일회성 바인딩을 사용할 때 어떻게 업데이트를 처리합니까?


MVVMCross는 일회성 바인딩을 사용할 때 어떻게 업데이트를 처리합니까?


MVVMCross는 바인딩 소스가 처음에 설정된 경우 뷰 모델에서 뷰로 한 번만 뷰로로 전송하여 일회성 바인딩을 사용할 때 업데이트를 처리합니다. 이 초기 전송 후, 바인딩은 뷰 모델에서 변경 메시지 또는 이벤트를 활성으로 모니터링하지 않습니다. 따라서, 바인딩 소스 자체가 재설정되거나 재개되지 않는 한 뷰 모델의 속성에 대한 후속 변경은 뷰에 반영되지 않을 것이다.

mvvmcross에서 일회성 바인딩의 키 포인트 :

1. 초기 데이터 전송 : 바인딩은 바인딩이 처음 설정 될 때 뷰 모델에서 뷰로 데이터를 전송합니다. 이것은 일반적으로 구성 가능하지만 설정 후에는 자주 변경되지 않는 필드에 유용합니다.

2. 연속 모니터링 없음 : 양방향 또는 단방향 바인딩과 달리 일회성 바인딩은 변경 사항에 대한 뷰 모델을 지속적으로 모니터링하지 않습니다. 이는 초기 바인딩 후 ViewModel의 속성이 변경되면 뷰가 자동으로 업데이트되지 않음을 의미합니다.

3. 사용 사례 : 언어 파일에서 정적 텍스트를 설정하는 것과 같이 데이터가 정적이거나 거의 변경되지 않는 시나리오에서 일회성 바인딩이 일반적으로 사용됩니다. 언어가 선택되면 사용자가 자주 변경하는 것은 드문 일이므로 그러한 경우에 한 번의 바인딩이 적합합니다 [1].

4. 바인딩 소스 재설정 : 바인딩 소스가 재설정되거나 재개되면 일회성 바인딩은 새 데이터를 뷰 모델에서 뷰로 다시 전송합니다. 그러나이를 위해서는 바인딩 소스를 재설정하기 위해 명시적인 조치가 필요합니다.

5. 동적보기의 한계 :`mvxRecyclerView '를 사용하는 것과 같은 동적 뷰에서, 뷰가 재활용되는 경우 일회성 바인딩이 예상대로 작동하지 않을 수 있습니다. 이러한 경우, 뷰가 재사용 될 때 바인딩이 재평가 될 수 있으며, 이는 예상치 못한 행동으로 이어질 수있다 [6].

요약하면, MVVMCross의 일회성 바인딩은 데이터를 한 번 설정하고 동적으로 업데이트 할 필요가없는 시나리오를 위해 설계되었습니다. 변경 사항에 대한 뷰 모델의 지속적인 모니터링을 피함으로써 바인딩 인프라를 단순화하지만 초기 바인딩 후 뷰 모델의 데이터가 변경되는 경우 뷰를 업데이트하려면 수동 개입이 필요합니다.

인용 :
[1] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-updates-to-bound-property-in-property-in-property-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-prompling-patterns-synchronous-mvvm-binding--binding
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[10] https://www.reddit.com/r/dotnetmaui/comments/103ai8p/mvvm_problems_having_troubles_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup