Вам нужно создать команду и привязать ее к кнопке. Все, что вы ищете, запекается для вас во время выполнения. Такие фреймворки, как MVVM Light и Prism, позволяют легко создавать новые команды, но вы можете сделать это самостоятельно, например:
Создайте класс, который реализует ICommand. Дайте ему приватное имя по имени SearchInProgress. Когда поиск начнется, установите для SearchInProgress значение true. Когда поиск завершится (либо успешно, либо по причине истечения времени ожидания, был прерван и т. Д.), Установите для SearchInProgress значение false. Реализация ICommand.CanExecute возвращает! SearchInProgress. Предоставьте Search 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:
<UserControl ....>
<UserControl.DataContext>
<ViewModel />
</UserControl.DataContext>
<Grid>
<Button Command={Binding SearchCommand} />
</Grid>
</UserControl>