【发布时间】:2020-04-15 23:55:16
【问题描述】:
我目前的视图中有一个 Datagrid (ProductView.xaml),如下所示:
DataGrid x:Name="myDataGrid" x:FieldModifier="public" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="No MAT" Binding="{Binding MATProductNumber}" Width="0.1*"/>
<DataGridTextColumn Header="Format" Binding="{Binding tblFormat.FormatName}" Width="0.1*"/>
<DataGridTextColumn Header="Nom produit" Binding="{Binding tblProduct.ProductName}" Width="0.1*"/>
</DataGrid.Columns>
由于我仍然熟悉 WPF 和 C#,我仍然不能 100% 适应 MVVM 模式。 我设法通过在我的 productView.xaml.cs 中插入此代码来将数据绑定到我的 Datagrid:
public ProductListView()
{
InitializeComponent();
LoadProducts();
}
private void LoadProducts()
{
myDataGrid.ItemsSource = db.tblMATProduct.Include(s => s.tblGrade).Include(s => s.tblProduct).Include(s => s.tblFormat).Take(15).ToList();
}
在这里,我将 myDataGrid 的 itemsSource 设置为 代码隐藏 中的 Entity Framework 查询的结果。
但是,我读到最好在 View Model 文件中实现它。
因此,我现在已在代码隐藏中将数据上下文绑定到我的视图模型,并将其添加到我的 ViewModel 类中
public ProductListViewModel()
{
ProductsList = new List<tblMATProduct>(db.tblMATProduct.Include(s => s.tblGrade).Include(s => s.tblProduct).Include(s => s.tblFormat).Take(15).ToList());
}
public List<tblMATProduct> ProductsList { get; }
并且还修改了我的Datagrid
DataGrid x:Name="myDataGrid" ItemsSource="{Binding DataContext.ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">
但看起来它没有绑定数据。
有谁知道为什么这个逻辑不正确?
提前致谢!
【问题讨论】:
-
"myDataGrid 的 itemsSource...result...Entity Framework...code-behind 已经读到最好在 View Model 文件中实现它" -不完全的。虽然 MVVM 确实说最好在视图模型 (VM) 中公开集合并让视图 (V) 绑定到它,但它没有说明集合是如何填充的。即 MVVM 不关心 EF。您可能想要创建一个执行 EF 工作的服务。然后可以将此类服务注入您的 VM,并在加载期间让 VM 调用该服务以通过 EF 加载模型。
-
@RandyQuackers:删除“DataContext”。从绑定路径。
-
这就是问题@mm8。非常感谢!
标签: c# .net wpf entity-framework mvvm