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