我有一堆TextBox。我希望在每次点击按钮时在堆栈末尾添加新的TextBox 我的代码是:
<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.help我用示例code.how来实现这个目的吗?
答案 0 :(得分:1)
您的XAML文件应该如下所示(添加&#34; button_Click&#34;按钮的事件处理程序):
<StackPanel x:Name="tbPanel">
...
</StackPanel>
<Button Content="Add Metric" Width="100" HorizontalAlignment="Center" Height="30" Grid.Row="1" Grid.Column="0" Click="button_Click"/>
在你的代码后面的文件添加方法
private void button1_Click(object sender, RoutedEventArgs e)
{
var newTextBox = new TextBox();
// here set new textbox parameters
tbPanel.Children.Add(newTextBox);
}
答案 1 :(得分:0)
我会将文本框放在StackPanelPanel(容器)中,并在按钮click-event上构建一个新文本框并添加它添加面板的末尾。
伪:
var textBox = new TextBox();
textBox.Width = 100;
...
this.ThePanel.Controls.Add(textBox);
如果代码隐藏,那么我建议从代码隐藏中添加所有控件并将它们存储在某种类型的数组中(可能是Queue或List),以便您以后可以轻松地从中获取值。
答案 2 :(得分:0)
这是我在编写MVVM应用程序时所做的。
创建将处理命令的类(这只是一个快速示例):
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();
}
}
现在在你的ViewModel下,你必须创建两件事: 1)使用按钮点击创建方法,如下所示
Public void ButtonWasClicked()
{
//do something here
}
2)创建实际命令
private ICommand _cmd_MyCommand;
public ICommand cmd_MyCommand
{
get { return _cmd_MyCommand ?? new CommandHandler(ButtonWasClicked, new Func<bool>(() => true)); }
}
最后在你的View(WPF窗口)下你可以像这样绑定命令:
<Button Command="{Binding cmd_MyCommand}">
显然,还有其他方法可以在WPF中使用命令(例如,某些人可能建议使用RelayCommand)。这在开始时可能看起来有点奇怪(为什么简单的按钮点击会有这么多麻烦),但是一旦你开始使用它们,你会很快进入它。
以下是我过去使用的一些关于MVVM命令的精彩视频:http://www.youtube.com/watch?v=EpGvqVtSYjs
祝你好运!