我有几个嵌套类,具有以下结构:
BackupLocation包含BackupClients列表
BackupClients包含BackupVersions列表
BackupVersions包含BackupFiles列表
在我的UI中 - 我使用BackupLocations填充组合框 - 并为客户端,版本和文件提供了多个列表框。
处理BackupLocations时 - 我可以轻松更新状态栏,因为这是UI创建的顶级类。但是,如何更新正在处理的每个文件的状态栏和进度条?由于BackupFiles是3级深,我无法看到任何更新UI的方法。文件的实际处理在BackupVersion类中 - 它加载其文件。
我认为它可能与活动和代表有关 - 但我不确定如何继续这一点,任何帮助都将不胜感激。
答案 0 :(得分:4)
我会使用事件并通过类冒泡它们。
基本上:
在一个非常简单的代码示例中,请参阅下面的内容(无空检查等一般概念):
class A
{
public A()
{
ExampleB.StatusUpdate += new EventHandler<ExampleArgs>(ExampleB_StatusUpdate);
}
void ExampleB_StatusUpdate(object sender, ExampleArgs e)
{
UpdateUI();
}
public B ExampleB { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class B
{
public B()
{
ExampleC.StatusUpdate += new EventHandler<ExampleArgs>(ExampleC_StatusUpdate);
}
void ExampleC_StatusUpdate(object sender, ExampleArgs e)
{
OnChanged(e);
}
public C ExampleC { get; set; }
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class C
{
public event EventHandler<ExampleArgs> StatusUpdate;
protected virtual void OnChanged(ExampleArgs e)
{
if (StatusUpdate != null)
{
StatusUpdate(this, e);
}
}
}
class ExampleArgs : EventArgs
{
public string StatusUpdate { get; set; }
}