tutorial example español commandmanager c# wpf mvvm command viewmodel

c# - example - ¿Cómo vincular el botón WPF a un comando en ViewModelBase?



relay command wpf (1)

Tengo una vista AttributeView que contiene todo tipo de atributos. También hay un botón que cuando se presiona, debe establecer los valores predeterminados para los atributos. También tengo una clase ViewModelBase que es una clase base para todos los ViewModels que tengo. El problema es que parece que no puedo conectar el botón al comando con WPF.

He intentado esto, pero simplemente no hace nada:

<Button Command="{Binding DataInitialization}" Content="{x:Static localProperties:Resources.BtnReinitializeData}"></Button>

El comando está definido (en ViewModelBase ) de esta manera:

public CommandBase DataInitialization { get; protected set; }

y en el inicio de la aplicación se crea una nueva instancia para el comando:

DataInitialization = new DataInitializationCommand()

Sin embargo, el enlace de WPF no parece "encontrar" el comando (presionar el botón no hace nada). El ViewModel utilizado en la vista actual se deriva de ViewModelBase . ¿Qué más puedo probar (soy bastante nuevo en WPF, así que esta podría ser una pregunta muy simple)?


<Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Command="{Binding ClickCommand}" Width="100" Height="100" Content="wefwfwef"/> </Grid>

el código detrás de la ventana:

public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new ViewModelBase(); } }

Y el ViewModel:

public class ViewModelBase { public ViewModelBase() { _canExecute = true; } private ICommand _clickCommand; public ICommand ClickCommand { get { return _clickCommand ?? (_clickCommand = new CommandHandler(() => MyAction(), _canExecute)); } } private bool _canExecute; public void MyAction() { } } public class CommandHandler : ICommand { private Action _action; private bool _canExecute; public CommandHandler(Action action, bool canExecute) { _action = action; _canExecute = canExecute; } public bool CanExecute(object parameter) { return _canExecute; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { _action(); } }

Espero que esto te dé la idea.