模型视图演示者 - 处理更复杂的UI控件

时间:2009-06-15 19:22:00

标签: controls user-interface mvp

我正在调查Model View Presenter模式。到目前为止,我喜欢我所看到的,但几乎所有的文章,网络广播,播客等等。我看过,读过或听过的都倾向于处理设置和从文本框中检索简单类型,我很难理解如何处理更复杂的UI控件。

例如,假设我有一个CheckedListBox。在这个CLB中,我想显示所有可用的选项和为给定实例选择的选项(想象一个带有FavouriteIceCreamFlavours列表的Friend类)。我可以轻松地填充列表框,但是我如何设置选择哪个(比如在这个朋友的后续编辑中)。另外,我如何将这些更改持久保存回底层的Friend对象?

另一个候选人将是TreeView。假设通过右键单击电视中的节点,我希望用户能够删除该节点 - 将该操作传达回演示者的最佳方法是什么?

干杯,

莱尼。

(PS我正在C#3.5 / WinForms环境中开发)

1 个答案:

答案 0 :(得分:0)

我也只是这个MVP的新手。但是我会去做我会做的事情。我对树视图的处理只是处理视图中的删除,因为它只是UI事件,但如果您使用某种数据库逻辑或其他东西,那么您可以这样做。

我会:

演示者界面:

Interface IPresenter
{
   bool DeleteItem(string itemName);
}

查看课程:

class View : IView
{
   IPresenter presenter = new Presenter(this);

   void DeleteButtonClick(//SomeEventArgs)
   {
      bool vaild = this.presentor.DeleteItem(//Get the selected item);
      if (vaild)
      { //Delete the item from the tree view }
   } 
}

演示者课程:

class Presenter : IPresenter
{
     public bool DeleteItem(string itemName)
     {
       // Check for valid delete.
       return true or false
     }
}

希望这应该有用。