UI 구성 요소의 가시성이 ViewModel 등록 정보에 바인드되고 해당 등록 정보의 PropertyChanged가 구현되었지만 UI가 자체 업데이트를 건너 뛸 수 있습니까?UI가 업데이트되지 않음 MVVM을 사용하여 PropertyChanged
보기/XAML :
<Border Visibility="{Binding ShowLoadingPanel, Converter={StaticResource BoolToHiddenConverter}}">
<TextBlock Text="LOADING..." />
</Border>
뷰 모델 :
Public Property ShowLoadingPanel As Boolean
Get
Return _showLoadingPanel
End Get
Set(value As Boolean)
_showLoadingPanel = value
OnPropertyChanged("ShowLoadingPanel")
End Set
End Property
는 뷰 모델에서 다음 실행 :
ShowLoadingPanel = True
RunBigTask() 'runs a task that takes a long time
ShowLoadingPanel = False
을 ... XAML에 정의 된 테두리가되지 않습니다 명백한. 내가 좋아하는, 예를 들어 사용자 상호 작용을 필요로 무언가를 추가 할 경우
는하지만 :
ShowLoadingPanel = True
MsgBox("Click to continue")
RunBigTask() 'runs a task that takes a long time
ShowLoadingPanel = False
원하는대로 ... 그 경계가 표시됩니다.
어떻게 가능합니까? 그것은 Visibility
를 업데이트에서 UI 스레드를 차단하기 때문에 그대로 장기 실행 작업이 완료되면
예, 장기 실행 작업에 백그라운드 스레드를 사용해야합니다. 나는 왜 UI가 ShowLoadingPanel = True 변경을 캐치하지 않는 단일 스레드에서 오랫동안 실행되는 작업이 시작되기 전에 여기에서 시작해야하는지 궁금해했다. 프로그램이 UI를 따라 잡기에는 너무 빠르다 ... 나는 그렇지 않다. 알 겠어. – Nuts
죄송합니다. 이전에 귀하의 의견에 답변했지만 웹 사이트에 오류가 있었음에 틀림 없습니다. @MikeStrobel이 말한 것 외에 프로그램 실행이 한 줄씩 실행됩니다. 다시 실행할 선이 없어 질 때까지 UI에 제어권을 다시주지 않습니다. 우리는 백그라운드 스레드에서 비동기 메서드 및/또는 실행 코드를 사용하여 이러한 상황을 강제 할 수 있습니다. [또는 Mike가 말한 것처럼 [MessageBox]를 표시합니다. – Sheridan