添加时,C#datagrid不会更新itemsource

时间:2018-08-05 15:55:54

标签: c# wpf mvvm datagrid

当在文本框中键入内容并单击“添加员工”时,我希望它更新并显示到数据网格中,我已经实现了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; }
}

这是我的ViewModel

    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>

1 个答案:

答案 0 :(得分:2)

(我将这个答案中的名称Employee复写为Employees,以供将来的读者使用)

问题出在Source中的DataGrid

请记住,OnPropertyChanged("Employees")仅通知对Employees所做的更改,对Employees内所做的任何更改概不负责。

请注意,它仅在您执行employeeModels = new List<EmployeeModel>()时有效 Employees.Add(employee)

不会被调用

希望WPF具有自己的ObservableCollection类型,可以解决此问题:

    private ObservableCollection<Employee> _employees = new ObservableCollection<Employee>;
    public ObservableCollection<Employee> Employees { get { return _employees; } }
相关问题