我有一个使用 Entity Framework 4.1、WPF 和 C# 的 MVVM 应用程序。我正在尝试获取它,以便当我在名为 LoanListingView 的视图中双击数据网格中的一行(网格绑定到我的数据库中名为 LoanComparisons 的实体集)时,它会切换到我的另一个视图(名为LoanCalculatorView)通过所选行中给出的信息传递我的数据库(名为 Loans 的实体集)中的信息。
到目前为止,我已经连接了应用程序,因此双击 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 方法将一个空值传递给它的方法,因为我不确定如何从我的另一个名为“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;
}
要记住的另一件事是,我的两个 EntitySet 具有一对多的关系。一笔贷款和一组 LoanComparisons。是否可以向我展示如何将所选行中的信息(代表我的 LoanComparisons EntitySet 中的实体)传递给 LoanCalculatorView?