これは簡単です。エンティティ フレームワークのマスター/詳細関係がある場合、コードに詳細レコードを追加するにはどうすればよいですか? Book という名前の親テーブル/エンティティと、ChapterTitle フィールド/プロパティを含む Chapter という名前の子/ルックアップ テーブル/エンティティがあるとします。ユーザーが ChapterTitles を TextBox に入力してから、[章のタイトルを追加] ボタンをクリックできるようにします。新しい ChapterTitle は、CollectionViewSource を介して Chapters テーブル/エンティティにバインドされた ListView に表示されます。
私は MVVM を使用していません (MVVM に関する回答は求めていません)。この Julie Lerman の投稿で説明されているように、データ ソース ウィンドウからドラッグ アンド ドロップを使用しています。私の場合の違いは、データグリッドを介して詳細を表示および追加する代わりに、ユーザーが新しい章のタイトルを追加するために ListView とテキストボックスを使用していることです。
ドラッグ アンド ドロップにより、XAML に次の 2 つの CollectionViewSource エントリが作成されました。
<Window.Resources>
<CollectionViewSource x:Key="booksViewSource" d:DesignSource="{d:DesignInstance my:Book, CreateList=True}" />
<CollectionViewSource x:Key="bookChaptersViewSource" Source="{Binding Path=ChaptersNav, Source={StaticResource booksViewSource}}" />
</Window.Resources>
自動生成されたコードは次のようになります。
private System.Data.Objects.ObjectQuery<Book> GetBooksQuery(BookEntities bookEntities)
{
// Auto generated code
System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = bookEntities.Books;
// Update the query to include Chapters data in Books. You can modify this code as needed.
booksQuery = booksQuery.Include("Chapters");
// Returns an ObjectQuery.
return booksQuery;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
BookEntities bookEntities = BookEntities();
// Load data into Books. You can modify this code as needed.
System.Windows.Data.CollectionViewSource booksViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("booksViewSource")));
System.Data.Objects.ObjectQuery<BookNamespace.Book> booksQuery = this.GetBooksQuery(bookEntities);
booksViewSource.Source = booksQuery.Execute(System.Data.Objects.MergeOption.AppendOnly);
}
ユーザーの章のタイトルをテキスト ボックスから取得し、詳細の CollectionViewSource (bookChaptersViewSource) を介して新しい詳細レコードとして追加するには、button_click イベントにどのコードを追加する必要がありますか? これは非常に単純だと思いますが、あまりにも多くの時間を試してみましたが、運がありませんでした。前もって感謝します!