「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.03.25
XML
カテゴリ: C#.NET


以下は、C# WPF アプリケーションで `ICommand` の基底クラスを実装するサンプルコードです。このサンプルでは、`RelayCommand` と呼ばれる独自の `ICommand` の実装を作成します。この `RelayCommand` は、ラムダ式やメソッドへのデリゲートを受け入れることができます。


```csharp

using System;

using System.Windows.Input;


namespace YourNamespace

{

    public class RelayCommand : ICommand

    {

        private readonly Action<object> _execute;

        private readonly Func<object, bool> _canExecute;


        public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)

        {

            _execute = execute ?? throw new ArgumentNullException(nameof(execute));

            _canExecute = canExecute;

        }


        public event EventHandler CanExecuteChanged

        {

            add { CommandManager.RequerySuggested += value; }

            remove { CommandManager.RequerySuggested -= value; }

        }


        public bool CanExecute(object parameter)

        {

            return _canExecute == null || _canExecute(parameter);

        }


        public void Execute(object parameter)

        {

            _execute(parameter);

        }

    }

}

```


この `RelayCommand` クラスは、`ICommand` インターフェースを実装しています。`RelayCommand` のインスタンスを作成するときに、実行するアクションを指定します。また、任意の場合に `CanExecute` メソッドを指定することができます。


これで、ViewModel 内で次のように `RelayCommand` を使用できます。


```csharp

using System;

using System.Windows.Input;


namespace YourNamespace

{

    public class MainViewModel

    {

        public ICommand SayHelloCommand { get; }


        public MainViewModel()

        {

            // SayHello メソッドを実行するコマンドを作成

            SayHelloCommand = new RelayCommand(SayHello, CanSayHello);

        }


        private void SayHello(object parameter)

        {

            Console.WriteLine("Hello, ICommand!");

        }


        private bool CanSayHello(object parameter)

        {

            // ここで条件を追加することができます

            return true;

        }

    }

}

```


このようにして、`RelayCommand` を使用して、WPF アプリケーション内でボタンや他のユーザーインターフェース要素にコマンドをバインドすることができます。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.03.25 05:30:25


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: