我可以将两个不同类型的列表绑定在一起吗?

本文关键字:列表 绑定 在一起 同类型 两个 我可以 | 更新日期: 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);

请注意,如果你需要一个所有视图、视图模型和模型的集合,这个设计似乎有一些根本性的错误。除非你有一些场景我不明白,这是可能的:)