0

我使用 ria 和 MVVM 构建了一个 Silverlight 应用程序。我创建了一个承载数据网格的 ChildWindow。此数据网格当前加载我的<Book>表。我自定义了数据网格以仅带回书名,并添加了一个复选框列来选择特定的书。仅当用户想要多选书籍时才会弹出。

我的目标是让用户选择他们想要的所有书籍,然后点击保存按钮,将这些书籍名称和 ID 添加到与我的书籍表有关系的另一个表中。book 表保存书籍列表和书籍 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,但它目前只是最后一个选定的项目。由于我的复选框控件嵌套在数据网格中,因此我无法通过代码隐藏访问它。我知道有办法,只是不知道怎么做。我以为 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>
4

1 回答 1

0

如果我对您的理解正确,您希望获得用户检查过的所有书籍。

您可以将 bool 属性 IsChecked 添加到 Book 类,并在 Datagridcheckboxcolumn 中创建两种方式绑定到它。因此,稍后您可以选择已检查的书籍。

如果您不想使用此属性扩展 Book 类,您可以为具有所需属性的书创建一个包装器,创建这些包装器的集合并将其绑定到 DataGrid。

<DataGrid ItemsSource="{Binding MyBooksCollection}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Binding="{Binding Path=IsChecked, Mode=TwoWay}" />
    </DataGrid.Columns>
</DataGrid>

MyBooks 集合应包含具有 IsChecked 属性的对象。

于 2012-08-31T19:35:20.243 回答