/// <summary>
/// コマンドの実装
/// </summary>
class ButtonCommand : ICommand
{
    private MainWindowViewModel MainWindow;

    /// <summary>
    /// コマンドを実行するかどうかに影響するような変更があった場合に発生する
    /// </summary>
    public event EventHandler CanExecuteChanged;

    /// <summary>
    /// CanExecuteChangedイベントを発行する
    /// </summary>
    public void OnCanExecuteChanged()
    {
        CanExecuteChanged?.Invoke(this, EventArgs.Empty);
    }

    /// <summary>
    /// 現在の状態でコマンドが実行可能かどうかを決定するメソッドを定義
    /// </summary>
    /// <param name="parameter">コマンドで使用されたデータ。 コマンドにデータを渡す必要がない場合は、このオブジェクトを null に設定できる。</param>
    /// <returns>コマンドを実行できる場合は true。それ以外の場合は false。</returns>
    public bool CanExecute(object parameter)
    {
        return (MainWindow?.SampleText == string.Empty ? false : true);
    }

    /// <summary>
    /// コマンドが起動される際に呼び出すメソッドを定義
    /// </summary>
    /// <param name="parameter">コマンドで使用されたデータ。 コマンドにデータを渡す必要がない場合は、このオブジェクトを null に設定できる。</param>
    public void Execute(object parameter)
    {
        MessageBox.Show(MainWindow.SampleText);
    }

    /// <summary>
    /// コンストラクタ
    /// </summary>
    /// <param name="viewmodel">ViewModelのインスタンスへの参照</param>
    public ButtonCommand(MainWindowViewModel mainWindow)
    {
        MainWindow = mainWindow;
    }
}