WPF에 익숙하지 않아서 Winforms에서 MVVM 패턴을 사용하려고했습니다. 단추를 클릭하면 API를 통해 msg를 검색하는 비동기 메서드가 시작되는 양식이 있습니다.MVVM on Winforms : 비활성화 된 단추를 끌 수 있습니다 (async/await 사용)
작업은 일부 UI 동작을 제어하는 속성 인 내보기 모델에서 실행되고 있습니다. 뷰 모델은 Fody Weaver Property Changed를 통해 INotifyOnPropertyChanged를 구현하고 뷰 모델 자체를 DataSource로받는 BindingSource를가집니다.
BindingSource bsViewModel = new BindingSource();
bsViewModel.DataSource = this; // this being the view model the BindingSource lives in
는 VM 속성이이 결함있는 경우를 제외하고 잘 작동 DataBinding.Add와 컨트롤의 속성()에 바인딩됩니다. 버튼 텍스트는 올바르게 업데이트되지만 버튼 위로 마우스를 가져 가면 (또는 버튼이 배치 된 UserControl에서 Refresh()를 호출 할 때만 버튼의 색상이 변경됩니다).
동료는 WinForms의 BindingSource, MVVM에서는 비동기 대기 대신 BackgroundWorker와 동일한 기술을 사용하고 있습니다. 그는 그 문제가 없습니다. 버튼이 제대로 사용 중지되고 사용 중지 된 경우 마우스 오버 효과가 표시되지 않습니다.
이 반쪽 비활성화 버튼의 원인은 무엇일까요?
또한 문제가없는 Winforms에서 MVVM을 구현했습니다 ... 문제를 재현 할 수 있도록 작은 코드 예제를 게시 할 수 있습니다. . – Sievajet