将实体框架的结果从视图模型绑定到视图

时间:2020-04-15 23:55:16

标签: c# .net wpf entity-framework mvvm

我目前的视图( ProductView.xaml )中有一个Datagrid,如下所示:

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#熟悉,因此我对MVVM模式仍然不满意100%。 通过在 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设置为实体框架查询的结果。

但是,我读到最好在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">

但是它似乎没有绑定数据。

有人知道为什么这种逻辑不正确吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果在加载窗口之后完成了DataContext的绑定,则在绑定时无需指定DataContext。

DataContext绑定必须是ViewModel的对象。因此,您可以直接访问ProductList。只需遵循以下代码即可。

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