次のRoutedCommandの例は機能します。RoutedCommandハンドラをView-codebehindからViewModelに移動するにはどうすればいいですか?
ただし、コマンドを実行するボタンの操作は、ビューのコードの後にあります。 MVVMを理解する方法は、はViewModelにあるはずです。 ManagedCustomersViewにOnSaveの定義が含まれていません。 "というエラーが表示されます。この場合、メソッドがViewModelに移動され、publicに変更されます。 RoutedCommandの2番目のパラメータをtypeof(ManageCustomersViewModel)に変更しても、同じエラーが発生します。
コマンドハンドラをView-codebehindからViewModelに移動するにはどうすればよいですか?
ManageCustomersView.xaml:
<UserControl.CommandBindings>
<CommandBinding Command="local:Commands.SaveCustomer" Executed="OnSave"/>
</UserControl.CommandBindings>
...
<Button Style="{StaticResource formButton}"
Content="Save"
Command="local:Commands.SaveCustomer"
CommandParameter="{Binding Id}"/>
ManageCustomersView.xaml.cs:
private void OnSave(object sender
, System.Windows.Input.ExecutedRoutedEventArgs e)
{
int customerId = ((int)e.Parameter);
MessageBox.Show(String.Format
("You clicked the save button for customer with id {0}.", customerId));
}
Commands.cs:
using System.Windows.Input;
using TestDynamicForm123.View;
namespace TestDynamicForm123
{
public class Commands
{
public static RoutedCommand SaveCustomer =
new RoutedCommand("SaveCustomer", typeof(ManageCustomersView));
}
}
ええと、私はこれらの2ビットのコードを追加しました。そして今、私のボタンをクリックすることは何もしません。私はUserControl.CommandBindingsを取り出すか、そのまま残しても効果はありません。出力には何もありません。それ以外に何が変わる必要がありますか? –
RoutedCommandを見てみましょう。ビューモデル内から新しいRoutedCommand(p => MessageBox.Show( "Saving。"))をすべて返すことができます。 –
私は以前のコメント者がRelayCommandを意味すると思います。 –