我目前的视图( 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">
但是它似乎没有绑定数据。
有人知道为什么这种逻辑不正确吗?
谢谢!
答案 0 :(得分:1)
如果在加载窗口之后完成了DataContext的绑定,则在绑定时无需指定DataContext。
DataContext绑定必须是ViewModel的对象。因此,您可以直接访问ProductList。只需遵循以下代码即可。
DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">