gpt4 book ai didi

c# - 如何将 WPF 按钮绑定(bind)到 ViewModelBase 中的命令?

转载 作者:IT王子 更新时间:2023-10-29 03:53:35 26 4
gpt4 key购买 nike

我有一个包含各种属性的 View AttributeView。还有一个按钮,当按下时,它应该将默认值设置为属性。我还有一个 ViewModelBase 类,它是我拥有的所有 ViewModel 的基类。问题是我似乎无法使用 WPF 将按钮绑定(bind)到命令。

我已经试过了,但它什么也没做:

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

命令定义如下(在 ViewModelBase 中):

public CommandBase DataInitialization { get; protected set; }

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

DataInitialization = new DataInitializationCommand()

但是,WPF 绑定(bind)似乎没有“找到”命令(按下按钮什么也不做)。当前 View 中使用的 ViewModel 派生自 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();
}
}

View 模型:

public class ViewModelBase
{
private ICommand _clickCommand;
public ICommand ClickCommand
{
get
{
return _clickCommand ?? (_clickCommand = new CommandHandler(() => MyAction(), ()=> CanExecute));
}
}
public bool CanExecute
{
get
{
// check if executing is allowed, i.e., validate, check if a process is running, etc.
return true/false;
}
}

public void MyAction()
{

}
}

命令处理程序:

 public class CommandHandler : ICommand
{
private Action _action;
private Func<bool> _canExecute;

/// <summary>
/// Creates instance of the command handler
/// </summary>
/// <param name="action">Action to be executed by the command</param>
/// <param name="canExecute">A bolean property to containing current permissions to execute the command</param>
public CommandHandler(Action action, Func<bool> canExecute)
{
_action = action;
_canExecute = canExecute;
}

/// <summary>
/// Wires CanExecuteChanged event
/// </summary>
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}

/// <summary>
/// Forcess checking if execute is allowed
/// </summary>
/// <param name="parameter"></param>
/// <returns></returns>
public bool CanExecute(object parameter)
{
return _canExecute.Invoke();
}

public void Execute(object parameter)
{
_action();
}
}

我希望这会给你带来灵感。

关于c# - 如何将 WPF 按钮绑定(bind)到 ViewModelBase 中的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com