質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Rx.NET

Rx.NETは、リアクティブプログラミングが可能なライブラリの一つ。.NET Framework向けReactive Extensionsライブラリです。マイクロソフト社が初めてRxライブラリとして提供し、ここから多くの言語にRxが移植されるようになりました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

2440閲覧

【WPF】【MVVM】CommandをButton以外で使用する方法を知りたい

galmacher

総合スコア37

Rx.NET

Rx.NETは、リアクティブプログラミングが可能なライブラリの一つ。.NET Framework向けReactive Extensionsライブラリです。マイクロソフト社が初めてRxライブラリとして提供し、ここから多くの言語にRxが移植されるようになりました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

1クリップ

投稿2018/10/27 15:03

【前置き】
MVVMパターンについて勉強をしていると、
従来のイベントハンドラをコードビハインドに記述することが嫌われるという情報をよく目にします。
そのための手段としてCommandをViewModelに実装して、Viewはそれをバインドするのが主流という認識です。

ネットで見かけるサンプルではButtonコントロールが例にあがっており、
ButtonにはCommandプロパティがデフォルトで用意されているので
大抵のサンプルコードは読んで理解ができました。

しかし、いざCanvasコントロールで試してみたところCommandプロパティが無いようでした。

【知りたいこと】
・Commandプロパティが存在しないコントロールはどうやってコードビハインドを避けた実装ができますか。
(Canvasコントロールを継承したクラスを作ってCommandプロパティを自作したり…?)
・一つのコントロールにいくつものCommandを定義することは可能でしょうか。
例えばクリック、ドラッグ、右クリックなどそれぞれのユーザ操作によって処理を分けたいです。

MomenToufu👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

UIElement.InputBindings PropertyUIElement.CommandBindings Property を使います。
InputBindings CommandBindings を検索してみてください。

個人的にはユーザーの入力をユーザーインターフェースの中で処理できるなら、View から ViewMode へコマンドを送ってビヘイビアをうんぬんかんぬんするように View と ViewMode を複雑に行ったり来たりするより、コードビハインドを使えばいいと思いますが、原理主義者には嫌われるかもしれません。

ただ、あまりにコードビハインドに頼りすぎるとテストが通りにくい汚いコードになるので、「コードビハインドには絶対書かない」くらいの気持ちでやった方がいいのかもしれません。
実際できますし。

投稿2018/10/27 15:15

編集2018/10/27 15:20
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

galmacher

2018/10/27 17:29

ご回答ありがとうございました。 Buttonコントロールの例ばかり出てきて何と検索すればよいのかも分からなかったため助かりました。 InputBindingsを使ってCanvasにクリックしたときのCommandを実装して動作を試すことができました。
guest

0

https://www.codeproject.com/Tips/478643/Mouse-Event-Commands-for-MVVM

これ使うととても便利です。
ソースコードを理解すると、マウス以外にも、いろいろなものに対して、コマンドができたりします。

「Behaviour」あたりの言葉で調べてみるといいかと。

あと、UWPでは、直接メソッドをバインドできたりして、Commandいらなかったのでは??みたいな気分になります。

投稿2018/10/27 15:28

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

galmacher

2018/10/27 17:29

ありがとうございます。 BehaviorというのはBlendの機能?なのですね。 勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問