13

WPF Microsoft Surfaceアプリケーションがあり、MVVM-Patternを使用しています。

コードビハインドで作成されたボタンがいくつかあり、それらにコマンドをバインドしたいのですが、XAMLでどのように機能するかしかわかりません。

このような:

<Custom:SurfaceButton Command="{Binding SaveReservationCommandBinding, Mode=OneWay}"/> 

しかし、私のボタンはXAMLには存在せず、コードビハインドにのみ存在するため、このように行うことはできません。

では、そのようなコマンドバインディングはコードビハインドでどのように機能するのでしょうか?

4

4 に答える 4

24

ボタンがコマンドにアクセスできる場合、受け入れられた答えはうまく機能します。ただし、MVVM では、これらは通常別々に保持されます (ビューのボタンとビューモデルのコマンド)。XAML では、通常、データ バインディングを使用して接続します (質問の例のように)。

動的なボタンがコマンドを見つけることができなかったときに、プログラムでエラーが発生しました (まったく異なる名前空間にあったため)。これが私がこれを解決した方法です:

SurfaceButton.SetBinding (Button.CommandProperty, new Binding("SaveReservationCommand"));
于 2014-10-14T22:11:26.120 に答える
21

SurfaceButton に「SurfaceButton1」という名前を付けており、コマンドのインスタンスにアクセスできると仮定すると、次のコードを使用できます。

SurfaceButton1.Command = SaveReservationCommand;
于 2010-06-17T08:14:55.000 に答える
6

Anvaka がテンプレートとして投稿したリンクからコードを取得しました。私は Telerik の RadMenuItem を使用していますが、Command プロパティを公開する他のコンポーネントを使用することもできます。

item = new RadMenuItem();
item.Header = "Hide Column";
DependencyProperty commProp = RadMenuItem.CommandProperty;
if (!BindingOperations.IsDataBound(item, commProp)) {
  Binding binding = new Binding("HideColumnCommand");
  BindingOperations.SetBinding(item, commProp, binding);
}
//this is optional, i found easier to pass the direct ref of the parameter instead of another binding (it would be a binding to ElementName).
item.CommandParameter = headerlCell.Column;
menu.Items.Add(item);

それが役に立てば幸いです...何かが明確でない場合は、申し訳ありませんが、それは私の最初の投稿です:)

于 2012-09-12T09:32:16.200 に答える