c# - event - wpf button viewmodel command



どのようにViewModelBaseのコマンドにWPFボタンをバインドするには? (1)

私はすべての種類のAttributeViewを含むビューAttributeViewを持っています。 押されると、デフォルト値を属性に設定するボタンもあります。 また、 ViewModelBaseクラスがあります。これは、私が持っているすべてのViewModelの基本クラスです。 問題は、WPFでコマンドにバインドされたボタンを取得できないように見えることです。

私はこれを試しましたが、それだけで何もしません:

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

コマンドは次のように( ViewModelBase )定義されています:

public CommandBase DataInitialization { get; protected set; }

アプリケーションの起動時に、コマンドの新しいインスタンスが作成されます。

DataInitialization = new DataInitializationCommand()

しかし、WPFバインディングはコマンドを「見つける」ようではありません(ボタンを押しても何もしません)。 現在のビューで使用されているViewModelBaseは、 ViewModelBaseから派生しています。 それ以外の何かを試すことができます(これは非常に単純な質問かもしれないので、私はWPFにはかなり新しくなっています)?


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

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

私はこれがあなたにアイデアを与えることを願っています。





viewmodel