你在哪里把你的手势命令放在Xamarin?在视图模型中?

时间:2017-09-08 04:20:59

标签: xamarin xamarin.forms

我目前有一个看起来像这样的视图模型:

public class PhrasesFrameViewModel : ObservableProperty
{
    bool customPointsSwitch;

    public PhrasesFrameViewModel()
    {

        var aButtonClickedCommand = new Command(() =>
        {
            App.DB.IncrementScore(App.cfs, App.phrase, (int)App.aBtn);
            App.correctButtonPressed = (int)App.aBtn;
            ResetTimer2();
        });

        var wordGridClickedCommand = new Command(() =>
        {
            if (App.Timer1Running)
                ResetTimer1();
            else
                ResetTimer2();
        });

    }

    private static void ResetTimer1()
    {
        if (App.tokenSource1 != null)
        {
            App.Timer1Seconds = 0;
            App.tokenSource1.Cancel();
        }
    }

    private static void ResetTimer2()
    {
        if (App.tokenSource2 != null)
        {
            App.Timer2Seconds = 0;
            App.tokenSource2.Cancel();
        }
    }

    public bool CustomPointsSwitch
    {
        get
        {
            return customPointsSwitch;
        }
        set
        {
            if (value != customPointsSwitch)
            {
                customPointsSwitch = value;
                NotifyPropertyChanged("CustomPointsSwitch");
                App.DB.UpdateBoolSetting(Settings.Cp, customPointsSwitch);
            }
        }
    }

我相信大多数视图模型都会有类似于CustomPointsSwitch的代码,但是手势识别器和命令的代码加上小的重置方法(视图模型中的一些其他方法使用)如何。这些都属于视图模型还是属于另一个类?

1 个答案:

答案 0 :(得分:1)

简答:在这种特殊情况下,根据相关代码共享,它们属于视图模型。

答案很长: 这取决于。如果你的命令处理程序需要与UI交互 - 它应该保持在视图中;如果它是其他任何东西,即表示或业务逻辑 - 它应该在视图模型中定义。

命令是MVVM模式的组成部分 - 因为它们允许视图模型与视图分离,这反过来使单元测试,维护和扩展更容易。它们是视图和视图模型之间通信的推荐通道(数据绑定除外)。

在大多数情况下,当视图中的用户交互/事件需要触发视图模型中的各种操作时,使用命令界面 - 在这些情况下,命令在视图模型本身中定义并公开为属性。