如何WPF按钮绑定到ViewModelBase命令?(How to bind WPF button

2019-06-18 04:32发布

我有一个观点AttributeView包含各种属性。 还有一个按钮按下时,应该设置默认值的属性。 我也有一个ViewModelBase类,是我把所有的ViewModels的基类。 问题是,我似乎无法获得绑定到WPF命令按钮。

我试过这个,但它只是没有做任何事情:

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

该命令被定义(在ViewModelBase )所示:

public CommandBase DataInitialization { get; protected set; }

而在应用程序启动一个新的实例为命令创建:

DataInitialization = new DataInitializationCommand()

然而,WPF结合似乎并没有“查找”命令(按下按钮什么都不做)。 在当前视图中所使用的视图模型从衍生ViewModelBase 。 还有什么我可以试试(我很新的WPF所以这可能是一个很简单的问题)?

Answer 1:

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

背后的窗口中的代码:

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

而视图模型:

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();
    }
}

我希望这会给你的想法。



文章来源: How to bind WPF button to a command in ViewModelBase?