【问题标题】:How can I bind multiple datagrids source using MVVM?如何使用 MVVM 绑定多个数据网格源?
【发布时间】:2013-06-18 23:57:16
【问题描述】:

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

1) 假设我有一个书架,其中有一个产品列表。我想用产品显示一个数据网格。

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

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

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

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

【问题讨论】:

    标签: c# .net wpf mvvm


    【解决方案1】:

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

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

    【讨论】:

    • @Seva 这将根据Shelves 集合中的项目显示DataGrids 的列表。 DataGrids 将包含 Products 集合的数据。似乎是您正在寻找的解决方案。如果没有,你应该改写你的帖子。
    【解决方案2】:

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

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

    然后您可以简单地使用ItemsSource = "{Binding Shelves}" 创建一个ItemsControl 并指定ItemsTemplate 属性,以便集合中的每个架子都显示为数据网格。

    【讨论】:

      猜你喜欢
      • 2012-10-29
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多