gpt4 book ai didi

c# - 使用 Entity Framework 和 MVVM 将数据库信息从一个 ViewModel 传递到另一个

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:51 24 4
gpt4 key购买 nike

我有一个使用 Entity Framework 4.1、WPF 和 C# 的 MVVM 应用程序。我试图得到它,以便当我在一个名为 LoanListingView 的 View 中双击数据网格中的一行(网格绑定(bind)到我的数据库中名为 LoanComparisons 的 EntitySet)时,它会切换到我的另一个 View (名为LoanCalculatorView) 通过所选行中给出的信息传递我的数据库(名为 Loans 的 EntitySet)中的信息。

到目前为止,我已经连接了该应用程序,因此双击 LoanListingView DataGrid 中的一行会打开 LoanCalculatorView,该 View 具有已输入到其字段中的默认值。

现在是一些代码。这是绑定(bind)到名为 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?

最佳答案

避免麻烦的一个建议是将一个属性绑定(bind)到数据网格的 SelectedItem 属性,这样您就无需担心触发双击事件时的“当前选择”。

对于你正在做的事情,我会这样分解调用:

  1. 为初始 GridView 执行对 EF 的第一次调用,以便可以填充列表。
  2. 假设由于主键或某些唯一标识符,每个项目都有一个 Id,只传递该值作为弹出窗口的参数。
  3. 在弹出窗口加载初始化期间加载 View 模型期间,使用 LINQ 调用实体以获取 ID 为“已传递 ID”的记录。
  4. 获取返回的实体 POCO,将其存储在 View 模型的属性中并在 View 中访问它。
  5. 注意:确保对所有 View 模型属性使用 INotifyPropertyChanged,以便 View 正确刷新。

这就是您要找的东西吗?

关于c# - 使用 Entity Framework 和 MVVM 将数据库信息从一个 ViewModel 传递到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11172975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com