在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}">