我正在阅读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。
任何(非明显的)职业选手对这些方法中的每一种都有所帮助吗?
答案 0 :(得分:1)
也许你实际上只需要视图作为winforms中属性的“演示者”,而在SL中所有的连线都是通过xaml完成的,这将需要更少的锅炉板。 因此,请将视图模型保存在公共代码库中,而视图特定于winforms。 对于ASP.NET来说,那些viewmodel事件并不是那么好用,除非你选择丑陋的oldschool webforms控件和回发。
我真的没有看到两种方法之间的区别,两种方法都适用于SL。
保持简单。