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