びおりんのブログ

きままにアプリのできるまでを公開していきます

WPFのMVVMで電卓づくり(11)

数字ボタンと浮動小数点ボタンのクリックをキャンセルするボタン「→」を実装します

構想

MainViewにてエラー時無効となるキャンセルボタン「→」を実装します
MainModelにてキャンセルボタンに対応した内部データの更新処理を実装します

実装

構想に沿って各MVVMクラスに追記していきます

MainView

キャンセルボタン「→」を実装します

     <!--キャンセル(戻る)ボタン-->
        <Button Grid.Row="2" Grid.Column="0" Content="→" CommandParameter="Undo"/>

尚、前回までの実装で既にボタンのStyleにて
IsEnabledにエラー時falseとなるプロパティを紐づけしてあります

MainModel

キャンセルボタンクリックでMainViewModel.PushCommand経由で
呼び出されるMainModel.SetOperation()にて
switch-case文にキャンセルボタン用の処理を追記します

                   case OperationKind.Undo:
                        Undo();
                        SetOperationText(ope);
                        break;

数字ボタンと浮動小数点ボタンのクリックをキャンセルする処理Undo()を作成します

       public void Undo() 
        {
            if (this.IsAdditional)
            {
                this.AffectText = this.AffectText.Substring(0, this.AffectText.Length - 1);
                if (string.IsNullOrEmpty(this.AffectText)
                 || this.AffectText.Equals("-"))
                {
                    this.AffectText = "0";
                }
                this.DisplayText = this.AffectText;
            }
            else
            {
                this.OriginalText = this.OriginalText.Substring(0, this.OriginalText.Length - 1);
                if (string.IsNullOrEmpty(this.OriginalText)
                 || this.OriginalText.Equals("-"))
                {
                    this.OriginalText = "0";
                }
                this.DisplayText = this.OriginalText;
            }
        }

動作確認

起動後「-」「・」「5」「=」とクリックした際の画面表示
f:id:kazoojapan1985:20200506170245p:plain
続いて「→」とクリックした際の画面表示
f:id:kazoojapan1985:20200506170917p:plain
続いて「→」とクリックした際の画面表示
f:id:kazoojapan1985:20200506170955p:plain
※参考にした電卓「HS-1220TSG」とは若干挙動が異なってます