c# - 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>
解决方案
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; } }
推荐阅读
- java - MongoDB java驱动聚合
- keras - tf.keras.models.clone_model中input_tensors的作用
- node.js - 无法在 angular8 中创建新项目
- python - 我可以通过 python 3.8.1 创建 python 视觉环境吗?
- java - 处理异常时初始化格式化程序?
- c - 将值分配给嵌套结构时出现分段错误
- ios - 使用 CL Location 的基于位置的应用程序。我的代码中有一行问题
- python - random.choice 用于 2D 数组,数字越大概率越高?
- angular - 当我正确发送令牌时出现未经授权的错误
- xamarin - 运行 Xamarin.Forms 应用程序时如何找出 Android 和 iOS 版本?