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

C# 在MVVM中填充大量文本框的最佳方法,c#,.net,wpf,mvvm,.net-4.0,C#,.net,Wpf,Mvvm,.net 4.0,我目前正在使用MVVM创建一个WPF应用程序。我在一个窗口中有大量的文本框(大约20个),这些文本框需要绑定到列表中的特定元素,并且需要一次性填充。通常情况下,我会将它们放入一个数组并以这种方式填充它们,但如果不破坏MVVM模型,我就无法这样做。在坚持MVVM的同时,有没有一种快速有效的方法可以做到这一点?我不明白为什么严格来说这会破坏MVVM,如果不使用数组,而是使用列表,将其放在ViewModel中,然后使用索引绑定绑定到特定元素 比如: <StackPanel> <T

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

我不明白为什么严格来说这会破坏MVVM,如果不使用数组,而是使用列表,将其放在ViewModel中,然后使用索引绑定绑定到特定元素

比如:

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

或者,如果您想要更动态的内容,而不是列表,请在VM中放置一个ObservableCollection,并使用DataTemplate将其绑定到ItemsControl中

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


语法可能不是100%,因为我没有要测试的IDE,但您可能正在追求这些东西。

如果不使用数组而使用列表,将其放在ViewModel中,然后使用索引绑定绑定到特定元素,我不明白为什么严格来说这会破坏MVVM

比如:

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

或者,如果您想要更动态的内容,而不是列表,请在VM中放置一个ObservableCollection,并使用DataTemplate将其绑定到ItemsControl中

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


语法可能不是100%,因为我没有要测试的IDE,但您可能正在追求这些东西。

如果您试图根据列表框中的选择填充textbox
另一个选项是创建一个集合视图源,如果您试图根据列表框中的选择填充textbox,我认为您在这里不需要它
另一个选项是创建一个集合视图源,我认为您在这里不需要它

您可以将列表绑定到
项控件
,并将其项模板更改为
文本框

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

您可以将列表绑定到
项目控件
,并将其项目模板更改为
文本框

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


您能否提供更多详细信息,您想在文本框中放置什么?仅将它们绑定到列表中的元素有什么问题?您能否提供更多详细信息,您想在文本框中放置什么?仅将它们绑定到列表中的元素有什么问题?正确。我希望找到一种方法来增量绑定它们,而不是仅仅将它们逐个绑定到元素上。没错。我希望找到一种方法来增量绑定它们,而不是将它们逐个绑定到元素。