首页 > 解决方案 > C# datagrid 在添加时不更新 itemsource

问题描述

在文本框中键入并单击“添加员工”时,我希望它更新并显示到数据网格,我已经实现了 INotifyPropertyChanged 和 RelayCommand。我错过了什么没有填充数据。提前谢谢这里是我的模型

public class EmployeeModel
{
    public string Name { get; set; }
    public int Pedicure { get; set; }
    public int Tip { get; set; }
    public int Total { get; set; }
}

这是我的视图模型

    List<EmployeeModel> employeeModel = new List<EmployeeModel>() { };

    private ICommand _addEmployeeCommand;

    public ICommand AddEmployeeCommand
    {
        get
        {
            return _addEmployeeCommand ?? (_addEmployeeCommand = new RelayCommand(x => { AddNewEmployee(); }));
        }
    }

    public List<EmployeeModel> Employee
    {
        get { return employeeModel; }
        set
        {
            if(value != employeeModel)
            {
                employeeModel = value;
                OnPropertyChanged("Employee");
            }
        }
    }

    private string employeeName;
    public string EmployeeName
    {
        get { return employeeName; }
        set
        {
            if (value != employeeName)
            {
                employeeName = value;
                OnPropertyChanged("EmployeeName");
            }
        }
    }

    public void AddNewEmployee()
    {
        Employee.Add(new EmployeeModel { Name = EmployeeName });
    }

这是我的看法

        <TabItem Header="Employee">
            <StackPanel Orientation="Vertical">
                <DataGrid ItemsSource="{Binding Employee}">
                </DataGrid>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Name: "/>
                    <TextBox Text="{Binding EmployeeName}"
                 Width="40"
                 Height="15"
                 VerticalAlignment="Top"/>
                    <Button Content="Add"
            Command="{Binding AddEmployeeCommand}"
                Height="20"
                VerticalAlignment="Top"/>
                </StackPanel>
            </StackPanel>

标签: c#wpfmvvmdatagrid

解决方案


Employee(我在这个答案中为Employees未来的读者复数了这个名字)

问题Source在于DataGrid

请记住,OnPropertyChanged("Employees")仅通知EmployeesEmployees.

需要明确的是,它仅在您这样做时才有效employeeModels = new List<EmployeeModel>() 并且不会在何时调用Employees.Add(employee)

希望 WPF 有自己的ObservableCollection类型来解决这个问题:

    private ObservableCollection<Employee> _employees = new ObservableCollection<Employee>;
    public ObservableCollection<Employee> Employees { get { return _employees; } }

推荐阅读