全部
我有一个包含客户列表的表单。
选择一个客户会带来另一个表格,其中一个数据网格填充了“BooksBoughtByCustomer”,并带有一个带有组合框的数据模板。
我的问题是这个
使用客户购买的所有图书填充数据网格。 但是,单击组合框应该列出“AllBooksAvailable”
再次 基本上,组合中的selectedItem应该是客户购买的书之一
选择下拉列表应列出所有书籍。
当我加载表单“MVVM”时,我有2个集合
CustomerBooks
AllBooks
<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>
答案 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();