簡體   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