Entity Framework 4.1、WPF、および C# を使用する MVVM アプリケーションがあります。LoanListingView という名前のビューでデータグリッド (グリッドは LoanComparisons という名前のデータベースの EntitySet にバインドされます) から行をダブルクリックすると、別のビュー (という名前) に切り替わるように取得しようとしています。 LoanCalculatorView) は、選択された行で指定された情報によって、私のデータベース (Loans という名前の EntitySet) 内の情報を渡します。
これまでのところ、既にアプリを配線しているので、LoanListingView DataGrid の行をダブルクリックすると、フィールドに入力されたデフォルト値を持つ LoanCalculatorView が開きます。
次に、いくつかのコードについて説明します。LoanComparisons という名前のデータベース エンティティ セットにバインドする DataGrid を次に示します。
<DataGrid MouseDoubleClick="OnDoubleClick" ItemsSource="{Binding Path=LoanComparisons}"
AutoGenerateColumns="False" SelectionChanged="DataGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Customer Name" Binding="{Binding Path=Name}" />
<DataGridTextColumn IsReadOnly="True" Header="Home Value" Binding="{Binding Path=HomeValue}" />
<DataGridTextColumn IsReadOnly="True" Header="Monthly Income" Binding="{Binding Path=MonthlyIncome}" />
<DataGridTextColumn IsReadOnly="True" Header="First Payment" Binding="{Binding Path=FirstPaymentDate}" />
</DataGrid.Columns>
</DataGrid>
任意の行をダブルクリックすると、事前に設定された値で LoanCalculatorView が開きます。現在、DoubleClick イベントは次のコードを実行します:
/// Handles double-clicks on datagrid rows
private void OnDoubleClick(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
DataGrid grid = sender as DataGrid;
if (grid != null && grid.SelectedItems != null && grid.SelectedItems.Count == 1)
{
DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem) as DataGridRow;
_viewModel.Open(null);
//The DataContext will be set to dgr but since "DataGridRow"
//does not contain the Open method I cant do this:
// DataContext = dgr;
//dgr.Open(dgr);
//
//I think this is where I am lost at
}
}
}
現在、Open メソッドはそのメソッドに null 値を渡します。これは、"Loans" という名前の他の EntitySet から情報を渡す方法がわからないためです。開く方法は次のとおりです。
//Creates a new LoanCalculatorViewModel that calls the SetComparisonDataRecord method
//passing it an argument comparison and changes the DataContext to LoanCalculatorView.
public void Open(LoanComparison comparison)
{
var loanCalculatorViewModel = new LoanCalculatorViewModel();
loanCalculatorViewModel.SetComparisonDataRecord(comparison);
var loanCalculatorView = new LoanCalculatorView {DataContext = loanCalculatorViewModel};
loanCalculatorView.Show();
}
最後に、今の SetComparisonDataRecord は単純に空ですが、そこに何を入れるべきか、どのように値を設定したいかについてコメントを入れます:
public void SetComparisonDataRecord(LoanComparison comparison)
{
//SharedValues.HomeValue = comparison.HomeValue;
}
留意すべきもう 1 つの点は、私の 2 つの EntitySet は 1 対多の関係にあるということです。1 つのローンと LoanComparisons のコレクション。選択した行 (LoanComparisons EntitySet のエンティティを表す) から LoanCalculatorView に情報を渡す方法を示すことは可能ですか?