Только начал использовать Xamarin - уже 10 лет использую PRISM с WPF. Не удается получить привязку для работающих команд кнопок. Привязка метки к собственности работает нормально (бла-фрик). Я устанавливаю BindingContext в коде (в ctor виртуальной машины) (потому что я разделяю Views и ViewModels в разных проектах).
Когда я нажимаю кнопку в приложении, обработчик команд никогда не срабатывает. Если я установлю команду на кнопку в коде (раскомментируйте последнюю строку ctor VM).
Кто-нибудь знает, почему это не работает? я что-то пропустил? Нужно ли использовать ViewModelLocator и связать его в XAML? спасибо.
XAML (MainPage.xaml):
<Label Text="{Binding Blah}" />
<Button
x:Name="rotateButton"
Command="{Binding RotateCommand}"
HorizontalOptions="Center"
Text="Click to Rotate Text!"
VerticalOptions="CenterAndExpand" />
XAML (MainPage.xaml.cs):
public partial class MainPage
{
public MainPage()
{
InitializeComponent();
}
public Button RotateButton => rotateButton;
public async void RotateLabel()
{
await label.RelRotateTo(360, 1000);
}
}
VM (MainPageViewModel.cs):
private string _blah;
public MainPageViewModel(MainPage mainPage)
{
mainPage.BindingContext = this;
RotateCommand = new Command(HandleRotateCommand,
() => true);
//if i uncomment this, the button fires. not ideal obviously.
//mainPage.RotateButton.Command = RotateCommand;
}
public ICommand RotateCommand { get; }
public string Blah
{
get => _blah;
set
{
_blah = value;
OnPropertyChanged();
}
}
private void HandleRotateCommand()
{
Debug.WriteLine("HandleRotateCommand");
View.RotateLabel();
}