我如何使用MVVM绑定多个数据源

本文关键字:数据源 绑定 MVVM 何使用 | 更新日期: 2023-09-27 18:18:54

让我先给你看一个有解的简单的问题,然后再给你看一个更复杂的没有解的问题。

1)假设我有一个架子,它有一个产品列表。我想用product显示一个数据网格。

解决方案:在View中,我可以在datagrid中插入类似的代码:"ItemSource = {Binding Products}"。然后在ViewModel中,我创建了一个名为"Products"的ObservableCollection属性。好的。

2)我有许多货架,哪一个有许多产品。我想显示许多数据网格一个在对方下面。每个数据网格显示一个Shelf的产品列表。

现在,我如何绑定到许多数据格?它可以是3个数据网格。它可以是500个数据网格。我如何使用MVVM做到这一点?

谢谢。我希望你明白我的问题。

我如何使用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。