我使用ria和MVVM构建了一个Silverlight应用程序。我创建了一个托管数据网格的ChildWindow。此数据网格当前加载了我的<Book>
表。我自定义数据网格以仅返回Book名称,并添加了一个复选框列以选择特定的书。这仅在用户想要多选书籍时弹出。
我的目标是让用户选择他们想要的所有书籍,然后点击保存按钮,将这些书名和ID添加到与我的书表有关系的另一个表中。书籍表格包含书籍和书籍ID列表,第二张表格<JM>
应该包含自己的ID和用户选择的所有书籍。因此,稍后,当用户想要搜索他们的书籍时,他们可以呼叫书籍或多个书籍选择,并且它将返回他们选择的所有书籍。简单的东西。
但是,我目前无法在表格中添加多本书籍。由于我的选择项代码,只输入了一本书。
JobMarket jm = new JobMarket();
foreach (Book b in dataGrid1.SelectedItems)
{
dataGrid1.SelectedItems.Add(b);
jm.BookID = b.BookID;
jm.Book = b.Book1;
}
_context.JobMarkets.Add(jm);
SubmitOperation s = _context.SubmitChanges();
this.DialogResult = true;
我是这样尝试的,因为我认为selectedItems会返回所有的selectedItems,但它目前只是最后一个选中的项目。由于我的复选框控件嵌套在datagrid中,我无法通过codebehind访问它。我知道有一种方法,我只是不知道该怎么做。我认为foreach会遍历并找到复选框,但事实并非如此。
所以我正在寻找一种解决方法,并在这一次点击事件中完成所有操作。有没有一种简单的方法在代码后面使用类似于我自己的代码(我的理解水平) 这也是xaml数据网格。
<sdk:DataGrid AutoGenerateColumns="False" Height="532" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" >
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Add Book">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="chkAddBook" IsChecked="{Binding Book1, Mode=TwoWay}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Book">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Book1}" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="12,3" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
答案 0 :(得分:0)
如果我理解正确,您希望获得用户检查过的所有书籍。
您可以将Bool属性IsChecked添加到Book类,并在Datagridcheckboxcolumn中创建与它的双向绑定。所以稍后你可以选择托运书籍。
如果您不想使用此属性扩展Book类,则可以使用required属性为该书创建包装器,创建这些包装器的集合并将其绑定到DataGrid。
<DataGrid ItemsSource="{Binding MyBooksCollection}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=IsChecked, Mode=TwoWay}" />
</DataGrid.Columns>
</DataGrid>
MyBooks集合应包含具有IsChecked属性的对象。