명령을 만들어 단추에 바인딩해야합니다. 당신이 찾고있는 모든 것은 런타임에 구워집니다. MVVM Light 및 Prism과 같은 프레임 워크를 사용하면 새 명령을 쉽게 만들 수 있지만 다음과 같이 직접 수행 할 수 있습니다.
ICommand를 구현하는 클래스를 만듭니다. SearchInProgress라는 이름의 개인 bool을 지정하십시오. 검색이 시작되면 SearchInProgress를 true로 설정합니다. 검색이 완료되면 (성공적으로 또는 시간 초과 되었기 때문에 중단되었거나 중단되었습니다) SearchInProgress를 false로 설정합니다. ICommand.CanExecute를 구현하여 SearchInProgress를 반환하십시오. 보기 모델에 ICommand 검색을 노출 한 다음 단추의 명령 속성을보기 모델의 명령에 바인딩하십시오.
사이비 코드 :
public class MySearchCommand : ICommand
{
public event EventHandler CanExecuteChanged;
private bool _searching;
private bool SearchInProgress
{
get { return _searching; }
set
{
if (_searching == value) return;
_searching = value;
if (CanExecuteChanged != null) CanExecuteChanged(this, EventArgs.Empty);
}
public bool CanExecute(object param)
{ return !SearchInProgress }
public void Execute(object param)
{
try
{
SearchInProgress = true;
// search code here including callback to OnSearchCompleted method
}
catch(Exception ex)
{
SearchInProgress = false;
}
}
private void OnSearchCompleted(SomeCallbackResult result)
{
SearchInProgress = false;
}
}
public class ViewModel : INotifyPropertyChange
{
public ICommand SearchCommand { get; private set; }
public ViewModel()
{
SearchCommand = new MySearchCommand();
}
}
XAML :
나는 이것이 얻을 수있는 GUI에서 동시에 여러 상황을 타개 할 줄 경우 그 그러나, 일 것이라고 생각
<UserControl ....>
<UserControl.DataContext>
<ViewModel />
</UserControl.DataContext>
<Grid>
<Button Command={Binding SearchCommand} />
</Grid>
</UserControl>
작은 지저분한. –