これは WPF + MVVM + EF です。DB に販売注文のテーブルがあります。UI では、すべての SalesOrderNumbers を含む ComboBox と、ComboBox で選択された注文の詳細を示す Labels と TextBoxes を含む Grid を表示します。次の ViewModel を検討してください。
Class SalesOrderViewModel
Public Property AllSalesOrderNumbers As List(Of Integer)
Public Sub New()
AllSalesOrderNumbers = context.SalesOrders.Select(Function(x) x.orderNumber).ToList()
If AllSalesOrderNumbers.Count > 0 Then SelectedOrderNumber = AllSalesOrderNumbers(0)
End Sub
Private Property mSelectedOrderNumber As Integer
Public Property SelectedOrderNumber As Nullable(Of Integer)
Get
Return mSelectedOrderNumber
End Get
Set(value As Nullable(Of Integer))
mSelectedOrderNumber = value
End Set
End Property
Public ReadOnly Property SelectedOrder As SalesOrder
Get
Return context.SalesOrders.FirstOrDefault(Function(x) x.orderNumber = SelectedOrderNumber)
End Get
End Property
End Class
UI では、ComboBoxItemsSource
は にバインドさAllSalesOrderNumbers
れ、 (with で)SelectedValue
バインドされます。一方、Grid の DataContext は にバインドされています。全体が正常に動作しています。SelectedOrderNumber
Mode=OneWayToSource
SelectedOrder
私の質問は、新規受注ボタンについてです。新しいレコードを追加するICommand
ために、基本的に次のことを行う ViewModel に を追加しました。
Dim NewOrder = context.SalesOrders.CreateObject()
context.SalesOrders.AddObject(NewOrder)
mSelectedOrderNumber = NewOrder.orderNumber
AllSalesOrderNumbers.Add(mSelectedOrderNumber)
私は次のことについて混乱しています:
SelectedOrder
SelectedOrderNumber プロパティの現在の値をモデルに照会します。DB にはまだこの新しいレコードがないため、null が返されます。DBに行く前にローカルコンテキストオブジェクトを調べるように依頼するにはどうすればよいですか?DataSets とは異なり、負に増加する ID 値を に割り当てない
orderNumber
ので、別の順序を追加するとどうなるか気になります。上記の 2 行目 ( ) が実行され
context.SalesOrders
た後、新しく追加された注文オブジェクトがコレクションに表示されません。context.SalesOrders.AddObject(NewOrder)