我有这样的标签:
<Label Grid.Row="1" Grid.Column="0" x:Name="faveLabel" Style="{StaticResource smallIcon}" FontFamily="FontAwesome" VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" />
在C#背后我有:
faveLabel.GestureRecognizers.Add(
new TapGestureRecognizer()
{
Command = new Command(() =>
{
App.phrase.Favorite = !App.phrase.Favorite;
faveLabel.TextColor = App.phrase.Favorite == true ? Color.Red : Color.Gray;
App.DB.UpdateFavorite(App.phrase.Favorite, App.phrase.PhraseId);
})
});
当我将ViewModel绑定到此框架时,如何将其移动到此viewModel代码中?
public class PhrasesFrameViewModel : ObservableProperty
{
public PhrasesFrameViewModel()
{
var aButtonClickedCommand = new Command(() =>
{
App.DB.IncrementScore(App.cfs, App.phrase, (int)App.aBtn);
App.correctButtonPressed = (int)App.aBtn;
ResetTimer2();
});
请注意,我真的想避免将手势识别器添加到XAML中,因为XAML已经相当大了。
答案 0 :(得分:3)
您可以绑定最新版本的Xamarin.Forms中的命令,因此您可以执行以下操作:
你的viewmodel:
public class PhrasesFrameViewModel : ObservableProperty
{
public PhrasesFrameViewModel()
{
var aButtonClickedCommand = new Command(() =>
{
App.DB.IncrementScore(App.cfs, App.phrase, (int)App.aBtn);
App.correctButtonPressed = (int)App.aBtn;
ResetTimer2();
});
你的xaml:
<Label.GestureRecognizers>
<TapGestureRecognizer Command="{Binding aButtonClickedCommand}"/>
</Label.GestureRecognizers>
这应该将viewmodel中的命令绑定到您的标签。