gpt4 book ai didi

c# - 如何在 MVP 中设置控件状态

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:10 24 4
gpt4 key购买 nike

我想在用户无法引发事件时禁用按钮(或其他控件)。做这个的最好方式是什么? View handles that or presenter should pass value by property in view 然后 View 将更新控件的状态。

例如,如果之前的查询未完成,用户不应开始新的查询。

选项 1:

interface IView
{
event EventHandler Event;
}

class View : IView
{
private readonly Button _button;

public event EventHandler Event;

public void button_Click(object sender, EventArgs e)
{
_button.Enabled = false;

if(Event != null)
{
Event(this, EventArgs.Empty);
}

_button.Enabled = true;
}

}

class Presenter
{
public void View_Event(object sender, EventArgs e)
{
// code...
}
}

选项 2:

interface IView
{
event EventHandler Event;

bool CanRaiseEvent { set; }
}

class View : IView
{
private readonly Button _button;

public event EventHandler Event;

public bool CanRaiseEvent
{
set
{
_button.Enabled = value;
}
}

public void button_Click(object sender, EventArgs e)
{
if (Event != null)
{
Event(this, EventArgs.Empty);
}
}
}

class Presenter
{
private readonly IView _view;
public void View_Event(object sender, EventArgs e)
{
_view.CanRaiseEvent = false;

// code...

_view.CanRaiseEvent = true;
}
}

我知道我应该在执行下一个查询之前检查演示者查询的状态,但我想通知 View 用户甚至不应该尝试。

最佳答案

我用于 MVP 设计的两个“试金石”测试是:1) 逻辑是否可测试?和 2) 我可以替换具体 View 并且应用程序仍然有效吗?

从这个角度来看,选项2看起来更有吸引力。

关于c# - 如何在 MVP 中设置控件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477815/

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