[解決済み] WPFバインディングを使用して2つのコマンドパラメータを渡す
2022-04-24 13:13:56
質問
以下の標準的な構文を使用して、XAMLファイルから実行するコマンドがあります。
<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand}"/>
これは、この操作をユーザーの期待通りに完了させるためには、ビューから 2 つの情報 (具体的にはキャンバスの幅と高さ) が必要であることに気づくまではうまくいっていました。
コマンドの引数に配列を渡すことは可能なようですが、CommandParameterに2つのcanvasプロパティへのバインドを指定する方法はないようですね。
<Button Content="Zoom"
Command="{Binding MyViewModel.ZoomCommand"
CommandParameter="{Binding ElementName=MyCanvas, Path=Width}"/>
幅と高さの両方をコマンドに渡すにはどうすればよいですか? これは、XAMLからコマンドを使用して可能であるようには思えませんし、私のcodebehindでクリックハンドラを配線して、ズームメソッドに渡すこの情報を取得する必要があります。
解決方法は?
まず、MVVMを使用している場合、通常、ビューからバインドされた別のプロパティを介して、この情報をVMで利用できるようにします。これにより、コマンドにパラメータを渡す手間を省くことができます。
しかし、マルチバインドして、コンバーターを使用してパラメータを作成することもできます。
<Button Content="Zoom" Command="{Binding MyViewModel.ZoomCommand">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource YourConverter}">
<Binding Path="Width" ElementName="MyCanvas"/>
<Binding Path="Height" ElementName="MyCanvas"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
コンバーターで
public class YourConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
return values.Clone();
}
...
}
次に、コマンド実行ロジックで
public void OnExecute(object parameter)
{
var values = (object[])parameter;
var width = (double)values[0];
var height = (double)values[1];
}
関連
-
[解決済み】Visual Studio 2015の追加デバッグオプションの無効化
-
[解決済み】WPFコンボボックスのカスタムリストへのバインド
-
[解決済み】無料のWPFテーマがあれば教えてください。[クローズド]
-
[解決済み] オーバーレイコントロールを他のすべてのコントロールの上に配置するには?
-
[解決済み] WPF TemplateBindingとRelativeSource TemplatedParentの比較
-
[解決済み] WPF:幅(と高さ)をパーセント値で設定する
-
[解決済み] WPFでイベント処理のためにリソース辞書の後ろにコードを設定することは可能ですか?
-
[解決済み] WPFのキーボードショートカット
-
[解決済み] データバインディングでWPFハイパーリンクのテキストを設定するにはどうすればよいですか?
-
[解決済み] レンダリング時間やパフォーマンスの面で最も効率的なパネルはどのような順番になりますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
WPFバインディング(データバインディング)の使用方法
-
[解決済み] Windows 8 ランタイム(WinRT / Windowsストアアプリ / Windows 10 ユニバーサルアプリ)とSilverlightやWPFの比較はどうですか?[クローズド]
-
[解決済み] [Solved] StackPanelの子要素をスペースアウトさせるには?
-
[解決済み] DataTrigger where value is NOT null?
-
[解決済み] WPF フォントのぼやけ問題- 解決策
-
[解決済み] WPFでイベント処理のためにリソース辞書の後ろにコードを設定することは可能ですか?
-
[解決済み] MVVMテンプレートの好例
-
[解決済み] Prism for WPFとは?
-
[解決済み] 読み取り専用のGUIプロパティをViewModelにプッシュバックする
-
[解決済み] ViewModelLocatorとは何ですか?また、DataTemplatesと比較した場合の長所と短所は何ですか?