我可以将两个不同类型的列表绑定在一起吗?
本文关键字:列表 绑定 在一起 同类型 两个 我可以 | 更新日期: 2023-09-27 18:10:26
我有一个关于MVVM模式绑定的问题。假设我有三个类MyView, MyViewModel和MyModel。每个包含一个静态列表:
static public List<Line> myViewList; (for MyView)
static public List<MyViewModel> myViewModelList; (for MyViewModel)
static public List<MyModel> myModelList; (for MyModel)
是否可以绑定myViewList与myviewmodelellist和myviewmodelellist与mymodelellist ?
您是否在询问是否可以将所有三个集合绑定到ItemsControls?
如果是,是-使用CompositeCollection
<ListBox Name="myListBox" Height="300" Width="200" Background="White">
<ListBox.ItemsSource>
<CompositeCollection>
<CollectionContainer
Collection="{Binding Source={StaticResource GreekGodsData}}" />
<CollectionContainer
Collection="{Binding Source={StaticResource GreekHeroesData}}" />
<ListBoxItem Foreground="Red">Other Listbox Item 1</ListBoxItem>
<ListBoxItem Foreground="Red">Other Listbox Item 2</ListBoxItem>
</CompositeCollection>
</ListBox.ItemsSource>
</ListBox>
以上代码来自MSDN文档。
如果您在问是否可以将三个静态列表相互绑定,那么不能直接绑定。绑定是用来将你的UI绑定到它们的后台viewmodel上,而不是将多个静态集合相互绑定。这可以通过使用getter公开另一个静态集合来实现,就像这样:
var col1 = new List<long>();
var col2 = new List<string>();
var totalCol = new List<object>();
totalCol.AddRange(col1);
totalCol.AddRange(col2);
请注意,如果你需要一个所有视图、视图模型和模型的集合,这个设计似乎有一些根本性的错误。除非你有一些场景我不明白,这是可能的:)