Привязка Entity Framework является результатом просмотра модели представления - PullRequest
0 голосов
/ 16 апреля 2020

У меня в настоящее время есть таблица данных в моих представлениях ( 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. Мне удалось привязать данные к моей Datagrid, вставив этот код в мой productView.xaml.cs :

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

Здесь я установил itemsSource myDataGrid в результат моего запроса 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">

Но похоже, что он не связывает data.

Кто-нибудь знает почему не прав в этой логи c?

Заранее спасибо!

1 Ответ

1 голос
/ 16 апреля 2020

Если вы выполнили привязку DataContext после загрузки окна, тогда нет необходимости указывать DataContext при привязке.

DataContext Binding должен быть вашим объектом ViewModel. Таким образом, вы можете получить прямой доступ к ProductList. Просто следуя приведенному ниже коду.

DataGrid x:Name="myDataGrid" ItemsSource="{Binding ProductsList}" x:FieldModifier="public" AutoGenerateColumns="False">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...