简体   繁体   English

将视图 Model 中的实体框架结果绑定到视图

[英]Binding Entity Framework results from View Model to View

I currently have a Datagrid in my views ( ProductView.xaml ) which goes like this:我目前在我的视图中有一个 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>

As I am still familiarizing with WPF and C#, I am not still 100% confortable with the MVVM pattern.由于我仍然熟悉 WPF 和 C#,我对 MVVM 模式还不是 100% 满意。 I managed to Bind the data to my Datagrid by inserting this code in my productView.xaml.cs :通过将此代码插入到我的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();
    }

Here, I set myDataGrid's itemsSource to the result of my Entity Framework query in the code-behind .在这里,我将 myDataGrid 的 itemsSource 设置为我在代码隐藏中的 Entity Framework 查询的结果。

However, I have read that it is better to implement it in the View Model file instead.但是,我读过最好在 View Model 文件中实现它。

Therefore, I have now binded the Data Context to my View Model in the code-behind and added this to my ViewModel class因此,我现在在代码隐藏中将数据上下文绑定到我的视图 Model 并将其添加到我的 ViewModel class

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; }

And have also modified my Datagrid并且还修改了我的 Datagrid

DataGrid x:Name="myDataGrid" ItemsSource="{Binding DataContext.ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">

But it looks like it's not binding the data.但看起来它没有绑定数据。

Does anyone know why is not right in this logic?有谁知道为什么这个逻辑不正确?

Thanks in advance!提前致谢!

If you have done binding of the DataContext after the window is loaded, then there is no need of specifying DataContext while Binding.如果在 window 加载后已经完成了 DataContext 的绑定,那么在 Binding 时不需要指定 DataContext。

DataContext Binding must be your object of ViewModel. DataContext Binding 必须是你的 ViewModel 的 object。 So you can directly access the ProductList.因此,您可以直接访问 ProductList。 By simply following the below code.只需遵循以下代码。

DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM