我应该把代码放在我的viewModel中点击按钮,如果是这样我怎么能绑定它?

时间:2017-09-04 08:47:02

标签: xamarin xamarin.forms

我的XAML代码如下所示:

<Button Grid.Column="0" x:Name="nButton" Text="Don't Know" />

和我已经链接的viewModel:

public CardViewModel card = new CardViewModel();
phraseGrid.BindingContext = card;

到目前为止,ViewModel看起来像这样:

public class CardViewModel : ObservableProperty
{
    string cvmLabel;

    public CardViewModel() { }

    public string CvmLabel
    {
        get { return cvmLabel; }
        set {
            if (value != cvmLabel) {
                cvmLabel = value;
                NotifyPropertyChanged("CvmLabel");
            }
        }
    }
    ...
    ...

目前我已经在后端C#编码了这个。

        nButton.Clicked += (sender, e) =>
        {
            App.DB.IncrementScore(App.cfs, phrase, 1);
            App.correctButtonPressed = 1;
            ResetTimer2();
        };

我想知道的是,如果这在viewModel中更合适,那么如果我把它放在那里,最好的方法是如何编码并链接按钮的绑定。

1 个答案:

答案 0 :(得分:5)

是的,在viewmodel中实现所有逻辑要好得多。处理后面代码中的单击事件将您的视图与后面的代码耦合在一起,使单元测试变得更加困难。总的来说,最好尽量减少耦合。

您应该使用按钮的Command参数指向视图模型中的ICommand,如下所示:

<强> XAML

<Button Grid.Column="0" x:Name="nButton" Text="Don't Know" Command="{Binding ButtonClickedCommand}" />

<强>视图模型

public ICommand ButtonClickedCommand {get; set;}

public CardViewModel() 
{
    var ButtonClickedCommand = new Command (() => Debug.WriteLine ("Command executed"));
}