2016-07-27 109 views
1

我想要制作一种排序形式,用户可以选择按动按钮动态添加更多文本框,每个文本框包含要从搜索中排除的目录路径。这是使用代码隐藏相对微不足道的,但我的问题是在适当的MVVM中执行它。动态文本框绑定

的结构一般的标记是

<ScrollViewer > 
    <StackPanel> 
     <DockPanel LastChildFill="False"> 
      <TextBox DockPanel.Dock="Left"/> 
      <Button DockPanel.Dock="Right" 
        Content="+"/> 
     </DockPanel> 
    </StackPanel> 
</ScrollViewer> 

单击该按钮将与TextBoxButton添加一个新的DockPanelStackPanel。除最底部的所有按钮都将变为负号。我怎样才能以某种方式绑定到所有文本框的文本?另外,一旦/如果我得到这个工作,是否更好地将它制作成它自己的组件?

+2

我会推荐你​​使用MVVM,它可以帮助你,让事情变得更简单。如果解决方案在代码隐藏方面更容易,那就去做吧。 – toroveneno

回答

3

快速伪代码,让您开始:

CS(视图模型):

// INotifyPropertyChanged if you need, as well as full-properties with notification 
public class Item 
{ 
    public string Text {get; set;} 
} 

public ObservableCollection<Item> Items { get; } = new ObservableCollection<Item>(); 

void OnCommandAdd() => Items.Add(new Item()); 

XAML(视图):

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Text}" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

的想法是使用能够控制显示列表(例如ItemsControl)和查看模型中的项目集合。通过向该集合添加项目来添加新元素以进行查看。

全部TextBox es将有Text绑定到项目的相应属性。