繁体   English   中英

如何使用 ViewModel 中的数据表填充视图中的数据网格

[英]How do I fill a datagrid in my View with my datatable in my ViewModel

我正在开发管理用户的 MVVM WPF 应用程序。 我想在我的用户视图的数据网格中显示用户表中的所有用户。 这是我的数据网格

        <DataGrid Grid.Row="1" Grid.Column="0" Name="UsersDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding UsersList}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name"  Binding="{Binding UTI_PRENOM}"/>
            <DataGridTextColumn Header="Last name" Binding="{Binding UTI_NOM}" />
            <DataGridTextColumn Header="Login" Binding="{Binding UTI_LOGIN}" />
        </DataGrid.Columns>
    </DataGrid>

这就是我目前在我的 UsersView.cs 中填充数据网格的方式:

public UsersView()
    {
        InitializeComponent();
        getAllUsersInDataGrid();
        
    }

    private void getAllUsersInDataGrid()
    {
        using (GestUserDbContext context = contextFactory.CreateDbContext())
        {
            var users =
                from UTILISATEUR in context.UTILISATEUR
                select new { UTILISATEUR.UTI_PRENOM, UTILISATEUR.UTI_NOM, UTILISATEUR.UTI_LOGIN };
            UsersListDataGrid.ItemsSource = users.ToList();
        }
    }

我想通过将 View 交给我当前为空的 UsersViewModel 来处理这个责任(尊重 MVVM)。 我应该怎么做,我试图在 ViewModel 中创建一个 UsersList 变量并通过 itemsSource 绑定它,但它没有工作。 顺便说一句,我的视图位于绑定到我的 ViewModel 的 ContentControl 内容中,它适用于其他用途,所以我认为这不是问题。

希望我让自己足够清楚,在此先感谢。

编辑:我想补充一点,我的主要问题是我不能使用 UsersListDataGrid.ItemsSource = users.ToList(); 在我的 ViewModel 中,因为这里没有 UsersListDataGrid。 我正在尝试通过 ViewModel 中的绑定(UsersList)传递数据。 我希望这不会更令人困惑。

您的绑定没有问题,您可以随时检查模拟对象,以防您不使用单元测试:

假设这是您的实体类:

public class User
{
    public string? UTI_NOM { get; set; }
    public string? UTI_PRENOM { get; set; }
    public string? UTI_LOGIN { get; set; }
}

这是绑定的代码:

    public MainWindow()
    {
        InitializeComponent();
        getAllUsersInDataGrid();
    }

    private void getAllUsersInDataGrid()
    {
        List<User> usersContext = new()
        {
            new User { UTI_LOGIN = "Login1", UTI_NOM = "Nom1", UTI_PRENOM = "PreNom1" },
            new User { UTI_LOGIN = "Login2", UTI_NOM = "Nom2", UTI_PRENOM = "PreNom2" },
            new User { UTI_LOGIN = "Login3", UTI_NOM = "Nom3", UTI_PRENOM = "PreNom3" },
        };

        var users =
            from UTILISATEUR in usersContext
            select new { UTILISATEUR.UTI_PRENOM, UTILISATEUR.UTI_NOM, UTILISATEUR.UTI_LOGIN };

        UsersDataGrid.ItemsSource = users.ToList();
    }

数据绑定成功:

WPF 窗口截图

因此,您的 DbContext 和从数据库中获取数据可能存在问题。

我想出了如何正确绑定,需要使用属性等。这解决了我的问题,我会关闭帖子,所以没有人可以浪费时间回答我!

编辑:我是如何做到的,而不是直接在我的视图中修改我的 Usergrid 的数据源,而是在我的 ViewModel 中创建了一个属性: UserList我绑定到我的 DataGrid ItemsSource="{Binding UsersList}" 我还让 UserList setter 触发OnPropertyChanged()所以现在它动态更新。 确实,我遇到的主要问题是使用变量而不是属性进行数据绑定。

例子:

这是一个变量:

private List<User> UserList;

这是一个属性:

        private List<User> _UsersList;
        public List<User> UsersList
        {
            get
            {
                return _UsersList;
            }
            set
            {
                _UsersList = value;
                OnPropertyChanged();
            }
        }

暂无
暂无

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

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