【发布时间】:2016-05-10 12:38:05
【问题描述】:
我有一个类 Step ,它有一个 Task 集合,即 List 。 Step 具有属性 Status , Time 。任务也具有相同的属性。每当任何任务的时间或状态发生变化时,都需要更新 Step 的 Status 和 Time 的值。 为此,我为 Step 类中的每个任务添加了处理程序。
private void AddHandlers()
{
foreach (Task tsk in Tasks)
{
tsk.PropertyChanged += HandleStatusChanged;
tsk.PropertyChanged += HandleTimeChanged;
}
}
private void HandleStatusChanged(object sender, EventArgs e)
{
UpdateStepStatusFromTasks();
}
private void HandleTimeChanged(object sender, EventArgs e)
{
UpdateStepTimesFromTasks();
}
private void UpdateStepTimesFromTasks()
{
// logic for calculating Time for Step
}
private void UpdateStepStatusFromTasks()
{
// logic for calculating Status for Step
}
这是 Task 中的 Property changed 事件处理程序 公共事件 PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
我的问题是,即使我只更改 Task Time ,它也会调用处理程序 Status 和 time 因为它们订阅了任务上的相同属性更改事件。
如何根据调用的属性来分叉属性更改事件,并确保仅调用相应的处理程序而不是同时调用两者?
对不起,如果这听起来很傻,但我有点 WPF 的初学者。
问候, P
【问题讨论】:
标签: c# wpf inotifypropertychanged