如何使用MVVM绑定多个datagrids源?

时间:2013-06-18 23:57:16

标签: c# .net wpf mvvm

让我向您展示一个解决方案的简单问题,然后是一个没有解决方案的更强复杂问题。

1)想象一下,我有一个货架,它有一个产品清单。我想用Products显示数据网格。

解决方案:在View中,我可能会在datagrid中插入类似的代码,如下所示:“ItemSource = {Binding Products}”。然后在ViewModel中,我创建一个名为“Products”的ObservableCollection属性。 好。

2)我有 MANY 货架,哪一个有很多产品。我想在彼此之下显示许多数据网格。每个数据网格显示一个货架的产品列表。

现在,如何绑定 MANY 数据网格?它可以是3个数据网格。它可以是500个数据网格。 如何使用 MVVM

执行此操作

感谢。我希望你理解我的问题。

2 个答案:

答案 0 :(得分:4)

假设您的ViewModel上有一个名为Shelves的Shelf集合,您可以使用ItemsControl或ListBox(如果需要选择),并定义DataTemplate:

<ItemsControl ItemsSource="{Binding Path=Shelves}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding Path=Products}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

答案 1 :(得分:0)

我认为常见的方法是创建两个视图模型

class Storage : ViewModelBase
{
     ObservableCollection<Shelf> Shelves { get; private set; }

     ...........
}


class Shelf : ViewModelBase
{
     ObservableCollection<Product> Products { get; private set; }

     ..........
}

然后,您只需使用ItemsControl创建ItemsSource = "{Binding Shelves}"并指定ItemsTemplate属性,这样集合中的每个货架都会显示为datagrid。