У меня есть команда (или фрагмент кода), которую я хочу запустить, когда конкретная запись теряет фокус.
Я использую MVVM, поэтому я хочу сделать это с помощью способа привязки вместо написания кода в моем Form.xaml.cs.
Как я могу заставить мою команду (или мой фрагмент кода) работать, когда моя запись теряет фокус в файле XAML?





В образцах Xamarin.Forms есть пример EventToCommandBehavior (глянь сюда). Используя это, вы можете связать свой контроль
<Entry>
<Entry.Behaviors>
<behaviors:EventToCommandBehavior
EventName = "Unfocused"
Command = "{Binding EntryUnfocused}" />
</Entry.Behaviors>
</Entry>
Затем определите EntryUnfocused в своем классе файла viewmodel.cs вашего конкретного представления, как показано ниже:
public class LoginViewModel : XamarinViewModel
{
public ICommand EntryUnfocused{ get; protected set; }
public LoginViewModel()
{
EntryUnfocused= new Command(CompletedCommandExecutedAsync);
}
private void CompletedCommandExecutedAsync(object param)
{
//yourcode...
}
}
Если вы используете библиотеку Prism, вы можете использовать их реализацию, которая является немного более зрелой (позволяет отображать аргументы события, указывая, какой параметр должен быть передан), глянь сюда.
(Пожалуйста, обрати внимание, что вам нужно будет добавить соответствующее пространство имен, в котором живет поведение, в ваш файл XAML).
Если вы используете Xamarin Community Toolkit, вы можете использовать уже существующий EventToCommandBehavior.
Использование этого будет таким же, как в ответе Пола Керчера.
Добавьте в свой контрольный заголовок:
xmlns:toolkit = "http://xamarin.com/schemas/2020/toolkit"
В вашем Entry привяжите к команде:
<Entry.Behaviors>
<toolkit:EventToCommandBehavior
EventName = "Unfocused"
Command = "{Binding EntryUnfocused}" />
</Entry.Behaviors>
Разве это не должно быть toolkit:EventToCommandBehavior?