在MVVM中填充大量文本框的最佳方法

时间:2013-06-24 13:19:58

标签: c# .net wpf mvvm .net-4.0

我目前正在使用MVVM创建一个WPF应用程序。我在一个窗口(大约20个)中有大量文本框需要绑定到列表中的特定元素,需要一次填充所有文本框。通常我会将它们推入一个数组并以这种方式填充它们但是我不能在不破坏MVVM模型的情况下这样做。有没有一种快速有效的方法可以在坚持MVVM的同时做到这一点?

3 个答案:

答案 0 :(得分:5)

您可以将列表绑定到ItemsControl,并将其项目模板更改为TextBox

<ItemsControl ItemSource={Binding aList}>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <TextBox Text="{Binding Text}"  />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

答案 1 :(得分:2)

我不明白为什么严格来说会破坏MVVM,如果不使用你使用List的数组,把它放在你的ViewModel中,然后使用索引绑定绑定到特定的元素。

类似的东西:

<StackPanel>
  <TextBox Text="{Binding MyViewModelList[0]}">
  <TextBox Text="{Binding MyViewModelList[1]}">
  <TextBox Text="{Binding MyViewModelList[2]}">
</StackPanel>

或者如果你想要更动态的东西,而不是List,在你的VM中放一个ObservableCollection,并在带有DataTemplate的ItemsControl中绑定它。

<ItemsControl ItemsSource="{Binding Path=MyViewModelObsCol}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <TextBox Text="{Binding}"/>                 
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

语法可能不是100%,因为我没有要测试的IDE,但是这些内容可能就是你所追求的。

答案 2 :(得分:1)

如果您尝试在列表框try this中选择的基础上填充文本框 另一种选择是创建一个我认为你不需要的COllection视图源