0

riaとMVVMを使用してSilverlightアプリを構築しました。データグリッドをホストするChildWindowを作成しました。<Book>このデータグリッドは現在、私のテーブルをロードしています。データグリッドをカスタマイズして本の名前だけを元に戻し、特定の本を選択するためのチェックボックス列を追加しました。これは、ユーザーが本を複数選択したい場合にのみポップアップします。

私の目標は、ユーザーが必要なすべての本を選択し、保存ボタンを押して、それらの本の名前とIDを私の本のテーブルと関係のある別のテーブルに追加することです。ブックテーブルには、ブックとブックIDのリストが保持され、2番目のテーブル<JM>には、独自のIDとユーザーが選択したすべてのブックが保持されることになっています。そのため、後でユーザーが自分の本を検索したいときに、その本または複数の本の選択を呼び出すことができ、選択したすべての本が返されます。簡単なもの。

ただし、現在、テーブルに複数の本を追加することはできません。選択したアイテムのコードが原因で、1冊の本しか入力されていません。

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 に答える