'실행'버튼, 결과 컨트롤 및 처리 컨트롤과 같은 3 개의 컨트롤이있는 사용자 창이 있습니다. 필자의 목표는 execute 키를 누른 후에 처리 컨트롤을 표시 한 다음 execute 메서드가 끝나면 숨 깁니다.WPF 컨트롤 가시성 및 명령 및 OnPropertyChanged
그러나 처리 제어가 표시되지 않습니다 ... 대신 사용자 입력을 요구하는 다른 윈도우를 만드는 콜백 함수가 호출 될 때만 표시됩니다.
처리 컨트롤의 가시성이 BoolToVis 변환기를 통해 내 viewmodel의 Processing
바운드에 바인딩됩니다. execute 메서드는 시작시 Processing
을 true로 설정하고 완료되면 false로 설정합니다. 내보기 모델 INotifyPropertyChanged.
private bool _processing;
public bool Processing
{
get
{ return _processing; }
set
{
_processing = value;
this.OnPropertyChanged("Processing");
}
}
private RelayCommand _search;
public RelayCommand Search
{
get { return _search ?? (_search = new RelayCommand(p => OnSearch(), p => CanSearch())); }
}
private void OnSearch()
{
this.Processing = true;
DoWork(delegate callBack);
this.Processing = false;
}
를 구현하고 OnPropertyChanged.
Processing
의 세터는 호출 XAML의 일부 :
<BooleanToVisibilityConverter x:Key="BoolToVis" />
<me:ProcessingControl Visibility="{Binding Path=Processing, Converter={StaticResource ResourceKey=BoolToVis}}"/>
'BackgroundWorker'또는를 사용하여 백그라운드 스레드에서'DoWork()'메소드를 실행해야합니다. TPL의'Task'을 사용하거나 C# 5 (VS 2012)를 사용하고 있다면 이것을 '기다릴 수 있습니다.' –
나는 그것을 시도 할 것이다. 그러나 나의 호기심은 여전히 남아 있습니다. DoPro()에 도달하기 전에 OnPropertyChanged를 통해 제어 흐름과 UI를 업데이트하지 않아야합니까? – Michael
아니요, UI 스레드가 DoWork() 메서드를 실행 중일 때 바쁘게 유지하므로 코드가 실행을 완료 할 때까지 UI를 새로 고칠 수 없기 때문입니다. –