我有一个存储任务列表的类Step:
public class Step
{
public string StepName { get; set; }
private string _stepStatus
public List<Task> Tasks { get; set; }
public string StepStatus
{
get
{
return _stepStatus;
}
set
{
_stepStatus = value;
}
}
public Step(String name)
{
StepName = name;
Tasks = new List<Task>();
}
我有一类任务:
public class Task
{
public string TaskName { get; set; }
private string _taskStatus
public string TaskStatus
{
get
{
return _taskStatus;
}
set
{
// raise an event here
_taskStatus = value;
}
}
public Task(String name)
{
TaskName = name;
}
每当个人更新任务时,我想提出一个事件。这个事件应该被父母抓住,即步骤..步骤应该检查所有任务的状态。
如果所有任务都是&#39; status为New,则Step status应自动设置为New。 如果所有任务都是&#39;状态已完成,然后步骤状态应自动设置为已完成。 如果任务的状态为“正在进行”,则“步骤状态”应设置为“进行中”。 我会称这种方法为TripleLogic,比如说。
我可以为上述三个做逻辑,因为这是合乎逻辑的。我不确定如何从任务状态设置器中引发事件并确保Step类对象选择它,因为我是C#的新手。如果有人可以通过一个小示例代码帮助我完成此事件,并向我展示如何获取我的父Step对象来捕获此事件并在该实例中调用TripleLogic。
我查看了INotifyPropertyChanged但不确定如何实现。 任何其他与代码设计相关的指针都会有所帮助。
答案 0 :(得分:1)
第一个建议是不要在QString::number
类上公开您的Tasks
属性,以便消费者无论何时何时都无法修改集合。而是将Step
方法添加到AddTask(Task t)
,然后在那里设置事件处理。
Step
类应该公开一个事件,可能称为Task
。当调用StatusChanged
属性上的setter时,触发该事件(在检查以确保有侦听器之后)。此事件的参数应包括更新的状态和任务的名称。如果你有一组有限的状态,我建议为它们定义一个枚举,而不是依赖于字符串。
示例:
TaskStatus
返回public class Task
{
public event EventHandler<TaskStatusEventArgs> StatusChanged;
//...
}
public enum TaskStatus
{
New,
InProgress,
Done
}
public class TaskStatusEventArgs: EventArgs
{
public string TaskName { get; private set; }
public TaskStatus Status { get; private set; }
public TaskStatusEventArgs(string taskName, TaskStatus status)
{
TaskName = taskName;
Status = status;
}
}
和Step
方法,订阅AddTask()
的{{1}}事件,并跟踪Task
中的任务数量。在StatusChanged
事件的处理程序中,您可以获取任务的新状态,并在Step
方法中执行您需要的任何逻辑。
示例:
StatusChanged
鉴于您已经提到过您是C#的新手,可能需要通过MSDN guide查看事件,特别是subscribing和publishing上的部分。发布部分提到了通用的TripleLogic()
代表,我强烈建议使用该方法。
你的问题很模糊,而且很大,如果再加上你缺乏语言经验,这可能需要一段时间才能完成。