MVVM:IView与数据绑定

时间:2011-05-18 19:22:31

标签: mvvm

我正在阅读MVVM,以便在我的演示层的视图中采用它。理想情况下,我想对WinForms,ASP.NET和SL使用相同的方法。

我遇到了两种不同的方法,我想收集这些(以及可能的其他方面)的意见:

“使用界面查看”以及视图数据绑定到ViewModel的位置

'使用界面查看'

在这种方法中,我们有一个接口IView,其中包含: - 设置/获取典型字段值的属性 - 视图上发生的操作事件

这种方式的工作方式是将IView注入ViewModel的具体实现。然后ViewModel连接

事件。然后它也“推”并通过属性拉取字段值。它还通过

了解View上发生的事情

事件。可以通过IView属性激活和停用控件。

在WinForms中,视图的具体实现很容易,不确定其他技术和SL中的“Blendability”。

public interface IMyView
{
  event EventHandler SomeActionClicked;

  Boolean CanEditField1 { get;set; }
  string Field1 { get;set; }
}

public class MyConcreteView: Form,IMyView
{
  public event EventHandler SomeActionClicked;

  public Boolean CanEditField1
  {
   get { return edtField1.Enabled; }
   set { edtField1.Enabled = value; }
  }
  public string Field1
  {
   get { return edtField1.Text; }
   set { edtField1.Text = value; }
  }

  private void btnAction_Click(object sender,EventArgs e)
  {
    SomeActionClicked(sender,e);
  }
}


public class ViewModel
{
  public ViewModel(IMyView view)
  {
    this.view = view;
    view.SomeActionClicked += SomeActionHandler;
  }

  private void SomeActionHandler(object sender,EventArgs e)
  {
    view.CanEditField = !view.CanEditField;  // Or whatever 'state' the ViewModel or Model is
    view.Field1 = DateTime.Now.ToString(...);
  }

  private IMyView view;
}

数据绑定视图

另一种方法是ViewModel,它有几个反映模型的属性(数据/字段值,UI控件状态等等)

然后,View使用数据绑定在视图的UI控件中“显示”字段值(Model)。 ViewModel也控制

UI控件通过数据绑定到的属性进行说明。视图中的操作通过

中的方法提供给ViewModel

挂钩的ViewModel。

任何(非明显的)职业选手对这些方法中的每一种都有所帮助吗?

1 个答案:

答案 0 :(得分:1)

也许你实际上只需要视图作为winforms中属性的“演示者”,而在SL中所有的连线都是通过xaml完成的,这将需要更少的锅炉板。 因此,请将视图模型保存在公共代码库中,而视图特定于winforms。 对于ASP.NET来说,那些viewmodel事件并不是那么好用,除非你选择丑陋的oldschool webforms控件和回发。

我真的没有看到两种方法之间的区别,两种方法都适用于SL。

保持简单。