如何使用 ViewModel 中的数据表填充 View 中的数据网格
How do I fill a datagrid in my View with my datatable in my ViewModel
我正在处理管理用户的 MVVM WPF 应用程序。我想在我的 UsersView 的数据网格中显示来自 Users Table 的所有用户。
这是我的数据网格
<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(目前是空的)来解除 View 的责任(尊重 MVVM)。
我应该怎么做,我尝试在 ViewModel 中创建一个 UsersList 变量并通过 itemsSource 绑定它,但它没有用。顺便说一句,我的视图位于绑定到我的 ViewModel 的 ContentControl 内容中,它适用于其他用途,所以我认为这不是问题。
希望我说得足够清楚,
提前致谢。
编辑:
我想补充一点,我的主要问题是我不能使用 UsersListDataGrid.ItemsSource = users.ToList();在我的 ViewModel 中,因为这里没有 UsersListDataGrid。我正在尝试通过 ViewModel 中的绑定 (UsersList) 传递数据。我希望这不会更令人困惑。
你的绑定没有问题,你可以随时检查模拟对象,以防你没有使用单元测试:
说这是你的实体class:
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();
}
数据绑定成功:
所以,您的 DbContext 和从数据库中获取数据可能有问题。
我想出了如何正确绑定、需要使用属性等。这解决了我的问题,我将关闭 post 这样就没人会浪费时间回答我了!
我正在处理管理用户的 MVVM WPF 应用程序。我想在我的 UsersView 的数据网格中显示来自 Users Table 的所有用户。 这是我的数据网格
<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(目前是空的)来解除 View 的责任(尊重 MVVM)。 我应该怎么做,我尝试在 ViewModel 中创建一个 UsersList 变量并通过 itemsSource 绑定它,但它没有用。顺便说一句,我的视图位于绑定到我的 ViewModel 的 ContentControl 内容中,它适用于其他用途,所以我认为这不是问题。
希望我说得足够清楚, 提前致谢。
编辑: 我想补充一点,我的主要问题是我不能使用 UsersListDataGrid.ItemsSource = users.ToList();在我的 ViewModel 中,因为这里没有 UsersListDataGrid。我正在尝试通过 ViewModel 中的绑定 (UsersList) 传递数据。我希望这不会更令人困惑。
你的绑定没有问题,你可以随时检查模拟对象,以防你没有使用单元测试:
说这是你的实体class:
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();
}
数据绑定成功:
所以,您的 DbContext 和从数据库中获取数据可能有问题。
我想出了如何正确绑定、需要使用属性等。这解决了我的问题,我将关闭 post 这样就没人会浪费时间回答我了!