1

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

4

3 回答 3

5

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

<ItemsControl ItemSource={Binding aList}>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <TextBox Text="{Binding Text}"  />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>
于 2013-06-24T13:27:42.913 回答
2

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

就像是:

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

或者,如果您想要更动态的东西,而不是 List,请将 ObservableCollection 放在您的 VM 中,并在 ItemsControl 中使用 DataTemplate 绑定到它。

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

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

于 2013-06-24T13:25:47.840 回答
1

如果您尝试根据列表框中的选择来填充文本框,请 尝试此 另一种选择是创建一个 COllection 视图源,我认为您在这里不需要

于 2013-06-24T13:27:39.847 回答