【发布时间】:2014-04-15 06:50:18
【问题描述】:
我是 WPF 的新手,我已经实现了INotifyPropertyChanged 接口。我有一个包含属性“TeamMemberList”的视图模型。控件执行 setter 部分,更改属性值,但 PropertyChanged 事件保持为空。
这是代码:
ViewModelBase:
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
ViewModel:(继承了viewmodelbase) 属性是
public List<Employee> TeamMemberList
{
get
{
return _teamMemberList;
}
set
{
_teamMemberList = value;
NotifyPropertyChanged("TeamMemberList");
}
}
绑定
<ListBox Margin="10" ItemsSource="{Binding TeamMemberList, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" >
当新员工添加到数据库时,模型读取它并为所有员工创建列表,然后更新 TeamMeberList 属性。这是 TeamMemberList 的更新方法
var qryEmp = from employee in ClientModel.EmployeeList
where employee.ReportingManager == UserProfile.EmployeeId
select new Employee
{
EmployeeId = employee.EmployeeId,
EmployeeName = employee.EmployeeName,
Designation = employee.Designation,
ProfilePic = employee.ProfilePic,
};
TeamMemberList = qryEmp.ToList();
以及Employee的实现
public class Employee : ViewModelBase
{
private string _employeeName;
private string _employeeId;
private string _profilePic;
private string _designation;
private string _reportinManager;
public string EmployeeName
{
get
{
return _employeeName;
}
set
{
_employeeName = value;
NotifyPropertyChanged("EmployeeName");
}
}
public string EmployeeId
{
get
{
return _employeeId;
}
set
{
_employeeId = value;
NotifyPropertyChanged("EmployeeId");
}
}
public string ProfilePic
{
get
{
return _profilePic;
}
set
{
_profilePic = value;
NotifyPropertyChanged("ProfilePic");
}
}
public string Designation
{
get
{
return _designation;
}
set
{
_designation = value;
NotifyPropertyChanged("Designation");
}
}
public string ReportingManager
{
get
{
return _reportinManager;
}
set
{
_reportinManager = value;
NotifyPropertyChanged("ReportingManager");
}
}
}
【问题讨论】:
-
除非您为其分配一个委托,否则它将为空。更新绑定不是问题。显示您正在更新的代码以及您的模型(员工类)的实现。
-
@Sankarann -
That will be null unless you assign a delegate to that- 这不是真的。你这是什么意思? -
@user3217737 - 您是否将 Viewmodel 作为 DataContext 设置为您的 View?
-
@RohitVats:对于 Binding 的更新,它不需要有一个值,并且对于处理属性更改的内部使用,
PropertyChanged可以分配一个委托。 -
但 OP 只希望它用于绑定目的。因此,无需分配委托。