DataGrid和comboBox有2个不同的集合。这可能吗?

时间:2010-11-13 08:24:16

标签: wpf

全部

我有一个包含客户列表的表单。

选择一个客户会带来另一个表格,其中一个数据网格填充了“BooksBoughtByCustomer”,并带有一个带有组合框的数据模板。

我的问题是这个

使用客户购买的所有图书填充数据网格。 但是,单击组合框应该列出“AllBooksAvailable”

再次 基本上,组合中的selectedItem应该是客户购买的书之一

选择下拉列表应列出所有书籍。

当我加载表单“MVVM”时,我有2个集合

  1. CustomerBooks

  2. AllBooks

  3. 下面是我的尝试,但显然是错误的。 我有点迷失如何做到这一点。你能给我一些建议或一些伪代码作为启动点吗?

           <DataGrid
                x:Name="dgCustomerBooks"
                AutoGenerateColumns="False"
                CanUserAddRows="False"
                CanUserDeleteRows="False"             
                ItemsSource="{Binding Source={StaticResource ViewModel}, Path=SelectedCustomer.CustomerBooks}" >
            <DataGrid.Columns>
                <DataGridTemplateColumn
                    Header="{Binding Source={StaticResource ViewModel}, Path=Strings.Title, Mode=OneTime}">                                
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox
                                x:Name="cboBooks"
                                ItemsSource="{Binding Source={StaticResource ViewModel}, Path=SelectedCustomer.AllBooks}"
                                MinWidth="100">                                                        
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>                            
            </DataGrid.Columns>
        </DataGrid>
    

1 个答案:

答案 0 :(得分:1)

“客户的书籍”不是“所有书籍”的子集吗? 在这种情况下,将Combobox的itemsSource属性设置为“所有书籍”,并通过查找此集合中的特定书籍来设置所选项目。

或者我在这里错过了一些东西...... 更新:

<StackPanel.Resources>
    <DataTemplate DataType="{x:Type WPF_Sandbox:Book}">
        <TextBlock Text="{Binding Name}"/>
    </DataTemplate>
</StackPanel.Resources>
<ComboBox  x:Name="cbo"  ItemsSource="{Binding Books}" SelectedItem="{Binding SelectedBook}"/>

ViewModel有2个属性 - Books和SelectedBook。 其中SelectedBook使用某些标准(如

)从书籍列表中选择一个
    this.Books = new[] { new Book{Id=1, Name="Book1"},
                         new Book{Id=2, Name="Book2"},
                         new Book{Id=3, Name="Book3"}};
    this.SelectedBook = Books.Where(book => book.Id == 2).First();