这可能是微不足道的。但我无法理解这一点。
public class Manager
{
public int ID { get; set; }
public List<Employee> Employees { get; set; }
public bool IsAllEmpEngaged { get; set; }
public void UpdateIsAllEmpEngaged()
{
IsAllEmpEngaged = Employees.All(emp => emp.IsEngagedwithWork == true);
}
}
public class Employee
{
public int ID { get; set; }
public bool IsEngagedwithWork { get; set; }
}
因此,每当IsEngagedwithWork
的{{1}}被设置为某个值时,我想检查Employee
下的所有Employees
是否与工作有关并更新相应Manager
的{{1}}的值。
我只想就IsAllEmpEngaged
的属性Manager
中的更改致电UpdateIsAllEmpEngaged
。我怎样才能做到这一点?
欢迎任何其他方式。
注意:我尝试在IsEngagedwithWork
上使用Employee
并附加event
Employee
,如果有任何更改,将会回调Action
Manager
财产。但我将有数百Employee
。我不想为List<Manager>
类的每个实例添加事件。有什么简单的方法吗?
我正在使用WPF MVVM方法,我不能使用直接Employee
,因为它不会通知UI。我必须手动get with LinQ
属性进行更改,以便它set
用户界面。
此外,在实际情况中,将在UI中为属性Notify
更新IsEngagedwithWork。
答案 0 :(得分:1)
简单的解决方案是将 ManagerId 添加到Employee模型类中,并在设置员工实例的IsEngagedwithWork(例如emp)的代码行之后,执行以下操作
Manager mngr = managers.Select(m => m.ID == emp.ManagerId).FirstOrDefault();
if(mngr != null)
mngr.IsAllEmpEngaged = mngr.IsAllEmpEngaged && emp.IsEngagedwithWork;
答案 1 :(得分:1)
我会像那样使用属性的getter
public bool IsAllEmpEngaged {
get {
return (Employees != null) &&
Employees.All(e => e.IsEngagedwithWork)
}
}
并为Manager Class
添加以下方法 public void NotifyChanged() { OnPropertyChanged(() => IsAllEmpEngaged }
然后你从员工类中调用它(假设你有管理者列表或等效方式)
private int _ID;
private bool _IsEngagedwithWork;
public int ID {
get { return _ID};
set {
_ID = value;
OnPropertyChanged(()=>ID );
notifyMe = managerList.FirstOrDefualt(m => m.ID == _ID);
if (notifyMe != null) { notifyMe.NotifyChanged()}
}
}
public bool IsEngagedwithWork {
get { return _IsEngagedwithWork ;}
set {
_IsEngagedwithWork = value;
OnPropertyChanged(()=>IsEngagedwithWork );
notifyMe = managerList.FirstOrDefualt(m => m.ID == _ID);
if (notifyMe != null) { notifyMe.NotifyChanged()}
}
}
答案 2 :(得分:0)
我会做什么:
现在有两个选择:
1)添加员工后,迭代集合并更新IsAllEmpEngaged属性
public void AddNewEmployee(Employee employee){
this.Employees.Add(employee);
bool all = true;
foreach(Employee emp in this.Employees){
if (!emp.IsEngagedwithWork){
all = false;
break;
}
}
this.IsAllEmpEngaged = all;
}
2)
以IsAllEmpEngaged = true开头;当班级被引入并且收集为空时
添加员工时,更新IsAllEmpEngaged属性,但保留最后一个选项的计数(仅当您不删除员工时才有效)
public void AddNewEmployee(Employee employee){
this.Employees.Add(employee);
this.IsAllEmpEngaged = this.IsAllEmpEngaged && employee.IsEngagedwithWork
}
答案 3 :(得分:0)
我不能说这更好,但这肯定是一种简单易行的方法。
为什么不让IsAllEmpEngaged
成为一种方法呢?您甚至不需要set
属性访问器,因此方法就足够了。
public bool IsAllEmpEngaged()
{
if (Employees == null)
{
// throw error
}
return Employees.All(e => e.IsEngagedwithWork);
}
答案 4 :(得分:0)
当您将Manager作为参数传递给Employee然后在IsEngagedWithWork设置为true时调用您的Method时,它可能会工作。
[1 4 7]