添加时,C#数据网格没有更新项源



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

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

问题出在DataGridSource

请记住,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; } }

最新更新