【发布时间】:2021-09-04 02:37:34
【问题描述】:
假设我的演示者从我的存储库中获取了我的 Person 类的列表,我想将该列表中的信息绑定到被动视图中的 ListBox 或 DataGridView。
由于视图不应该知道模型,我是否需要在演示者中将该列表转换为 List 并将其传递给视图以绑定到 ListBox 是否正确?
如果我想填充 DataGridView、List>,我应该向视图传递什么?
是否可以接受专门为视图绑定的模型,演示者将模型从存储库转换为视图的不同模型?
Person 模型示例:
public class PersonModel
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleInitial { get; set; }
}
【问题讨论】:
-
我今天学了一个新名词,被动视图!您可以将
List<T>绑定到DataGridView(或通过BindingSource进行绑定)。你的代码不需要知道任何关于T的信息,DGV 会解决这个问题。就个人而言,我会远离你的想法 -
@Flydog57 如果我不应该将模型传递给视图,我应该将什么类型 (T) 作为 List
传递? -
我不确定你的规则是什么,但在某些时候,你需要以某种方式将数据传递给视图。重要的事情(我假设)是您的视图与 T 无关。
List<T>类实现了IList,所以在视图中使用它。 DGV 仍会解决(我认为) -
@Flydog57 您是否使用 MVP 模式,是否将模型传递给您的 MVP 应用程序中的视图?这是我尝试使用 MVP 模式的第一个项目,而 AFAIK,视图不应该知道模型。
-
不,从未使用过 MVP。如果您对您的数据一无所知(例如,它的值),您如何呈现它?我写的是 WinForms 应用程序,它允许用户描述 SQL 查询(数据库可执行的任何内容)并呈现给用户(想想 SSMS)。在那种情况下,我只知道我有一个结果集合,都是相同类型(我不知道的类型)
标签: c# winforms mvp passive-view