我如何使用MVVM绑定多个数据源
本文关键字:数据源 绑定 MVVM 何使用 | 更新日期: 2023-09-27 18:18:54
让我先给你看一个有解的简单的问题,然后再给你看一个更复杂的没有解的问题。
1)假设我有一个架子,它有一个产品列表。我想用product显示一个数据网格。
解决方案:在View中,我可以在datagrid中插入类似的代码:"ItemSource = {Binding Products}"。然后在ViewModel中,我创建了一个名为"Products"的ObservableCollection属性。好的。
2)我有许多货架,哪一个有许多产品。我想显示许多数据网格一个在对方下面。每个数据网格显示一个Shelf的产品列表。
现在,我如何绑定到许多数据格?它可以是3个数据网格。它可以是500个数据网格。我如何使用MVVM做到这一点?
谢谢。我希望你明白我的问题。
假设你的ViewModel上有一个名为Shelves的Shelf集合,你可以使用ItemsControl,或者如果你需要选择的话使用ListBox,并定义一个DataTemplate:
<ItemsControl ItemsSource="{Binding Path=Shelves}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Path=Products}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我认为常见的方法是创建两个视图模型
class Storage : ViewModelBase
{
ObservableCollection<Shelf> Shelves { get; private set; }
...........
}
class Shelf : ViewModelBase
{
ObservableCollection<Product> Products { get; private set; }
..........
}
然后你可以简单地用ItemsSource = "{Binding Shelves}"
创建一个ItemsControl
,并指定ItemsTemplate
属性,这样集合中的每个架子都显示为datagrid。