gpt4 book ai didi

c# - 从其他类更新 UI 的最佳方式?

转载 作者:太空宇宙 更新时间:2023-11-03 22:21:36 27 4
gpt4 key购买 nike

我有几个嵌套类,结构如下:

BackupLocation 包含 BackupClients 列表

BackupClients 包含一个 BackupVersions 列表

BackupVersions 包含 BackupFiles 的列表

在我的 UI 中 - 我用 BackupLocations 填充了一个组合框 - 并且有几个用于客户端、版本和文件的列表框。

在处理 BackupLocations 时 - 我可以轻松更新状态栏,因为这是 UI 创建的顶级类。但是如何更新每个正在处理的文件的状态栏和进度条呢?由于 BackupFiles 有 3 层深,我看不到任何更新 UI 的方法。文件的实际处理在 BackupVersion 类中 - 它加载其文件。

我认为这可能与事件和代表有关 - 但我不确定具体如何进行,如有任何帮助,我们将不胜感激。

最佳答案

我会使用事件并将它们通过类冒泡。

基本上:

  • 在每个类中创建一个事件,其中包含可以处理您希望显示的特定状态更新的事件参数。
  • 当需要推送更新时,调用事件
  • 处理它上面的类中的事件,将你想要的任何标识信息添加到事件参数中(例如:如果你想使用 2 或 3 个状态栏,确定它需要更新的状态栏 - 或者更确切地说发生更新的级别)
  • 使用新的事件参数将事件调用到类上,等等。

在一个非常简单的代码示例中,请参见下面(没有空检查等,只是一般概念):

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; }
}

关于c# - 从其他类更新 UI 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com