在c#wpf中的按钮单击上添加文本框
我有一堆文本框。我想在每次单击按钮时在堆栈的末尾添加新的文本框 我的代码是:在c#wpf中的按钮单击上添加文本框,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一堆文本框。我想在每次单击按钮时在堆栈的末尾添加新的文本框 我的代码是: <TextBox Height="25" Width="100" Margin="15,15,0,15" > </TextBox> <Button Content="Add Metric" Width="100" HorizontalAlignment="Center" Height="30" Grid.Row="1" Grid.Column="0"/> 我正在使用MVVM。
<TextBox Height="25" Width="100" Margin="15,15,0,15" > </TextBox>
<Button Content="Add Metric" Width="100" HorizontalAlignment="Center" Height="30" Grid.Row="1" Grid.Column="0"/>
我正在使用MVVM。请用示例代码帮助我。如何实现这一点 您的XAML文件应该如下所示(将“button\u Click”事件处理程序添加到按钮):
我将文本框放在StackPanelPanel(容器)中,在按钮上单击event build up a new textbox(事件构建新文本框)并将其添加到面板的末尾 伪:
var textBox = new TextBox();
textBox.Width = 100;
...
this.ThePanel.Controls.Add(textBox);
如果代码隐藏,那么我建议添加代码隐藏中的所有控件,并将它们存储在某种数组(可能是队列或列表)中,以便以后可以轻松地从中获取值。以下是我在编写MVVM应用程序时所做的操作 创建将处理命令的类(这只是一个快速示例): 2) 创建实际命令
private ICommand _cmd_MyCommand;
public ICommand cmd_MyCommand
{
get { return _cmd_MyCommand ?? new CommandHandler(ButtonWasClicked, new Func<bool>(() => true)); }
}
private ICommand\u cmd\u MyCommand;
公共ICommand cmd_MyCommand
{
获取{return\u cmd\u MyCommand??新命令处理程序(按钮单击,新函数(()=>true));}
}
最后,在视图(WPF窗口)下,您可以如下方式绑定命令:
<Button Command="{Binding cmd_MyCommand}">
显然,还有其他方法可以用于WPF中的命令(例如,有些人可能建议使用RelayCommand)。这在一开始可能看起来有点奇怪(为什么一个简单的按钮点击会有这么多麻烦),但是一旦你开始使用它们,你就会很快地进入它
下面是一些关于MVVM命令的精彩视频,我过去也使用过这些命令:
祝你好运 要使用代码隐藏生成吗?这不是它的工作方式。你必须先试试。你会怎么处理这些文本框?是否有任何数据支持这些文本框?您应该使用数据绑定和
ItemsControl
。虽然这回答了问题,但很可能无法解决OP的问题。OP声称使用MVVM,因此应该使用数据绑定和ItemsControl
。虽然这回答了问题,但很可能无法解决OP的问题。OP声称使用MVVM,因此应该使用数据绑定和ItemsControl
。
class CommandHandler:ICommand
{
private Action action;
private Func<bool> isEnabled;
public CommandHandler(Action _action, Func<bool> _isEnabled)
{
action = _action;
isEnabled = _isEnabled;
}
public bool CanExecute(object parameter)
{
return isEnabled();
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
action();
}
}
Public void ButtonWasClicked()
{
//do something here
}
private ICommand _cmd_MyCommand;
public ICommand cmd_MyCommand
{
get { return _cmd_MyCommand ?? new CommandHandler(ButtonWasClicked, new Func<bool>(() => true)); }
}
<Button Command="{Binding cmd_MyCommand}">