gpt4 book ai didi

c# - 如何使用以编程方式创建的按钮在 WPF MVVM 中创建 OnClick 命令?

转载 作者:行者123 更新时间:2023-11-30 12:23:25 25 4
gpt4 key购买 nike

我正在编写一个以编程方式创建几个按钮的 WPF 应用程序。如何为 ViewModel 中的按钮创建 OnClick 命令?我想添加一个命令来使用 ResetButton 清除所有文本框。

new StackPanel
{
Orientation = Orientation.Horizontal,
Children =
{
new Button { Name = "SendButton", Content = "Send", MinWidth = 50, MaxHeight = 30, Margin = new Thickness(5), Background = Brushes.DodgerBlue },
new Button { Name = "ResetButton", Content = "Reset", MinWidth = 50, MaxHeight = 30, Margin = new Thickness(5), Background = Brushes.DarkRed}
}
});

最佳答案

您在创建堆栈面板时是否有权访问 View 模型?

如果是这样,您可以让您的 View 模型公开一个命令:

 var myViewModel = (MyViewModel)this.DataContext;
Button sendButton = new Button
{
Name = "SendButton",
Command = myViewModel.SendCommand,
// etcd
}

在你的 View 模型中:

class MyViewModel : INotifyPropertyChanged
{

private class SendCommand : ICommand
{
private readonly MyViewModel _viewModel;
public SendCommand(MyViewModel viewModel)
{
this._viewModel = viewModel;
}

void ICommand.Execute(object parameter)
{
_viewModel.Send();
}

bool ICommand.CanExecute(object p)
{
// Could ask the view nodel if it is able to execute
// the command at this moment
return true;
}
}

public ICommand SendCommand
{
get
{
return new SendCommand(this);
}
}

internal void Send()
{
// Invoked by your command class
}
}

这个例子只为这个命令创建了一个新类。多次执行此操作后,您可能会看到一个模式,并将其包装在一个通用实用程序类中。参见 http://www.wpftutorial.net/delegatecommand.html例如,或使用无数的 WPF 扩展库中的任何一个。

关于c# - 如何使用以编程方式创建的按钮在 WPF MVVM 中创建 OnClick 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904356/

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