我的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中更合适,那么如果我把它放在那里,最好的方法是如何编码并链接按钮的绑定。
答案 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"));
}