我正在阅读关于MVVM的文章,以便在我的表示层视图中采用这一点。理想情况下,我希望对WinForms、ASP.NET和SL使用相同的方法。
我遇到了两种截然不同的方法,我想在这些方法(可能还有其他方法)中收集意见:
“带接口的视图”以及视图被数据绑定到ViewModel的位置
‘带界面的视图’
在这种方法中,我们有一个接口IView,它包含:-设置/获取典型字段值的属性-视图上发生的操作的事件
其工作方式是通过将IView注入到ViewModel中的具体实现。然后,ViewModel将
事件。然后,它还通过属性“推”和“拉”字段值。它还可以通过以下方式了解视图上发生的情况
这些事件。可以通过IView属性激活和停用控件。
视图的具体实现在WinForms中很容易,不确定其他技术和SL中的“可混合性”。
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使用数据绑定在View上的UI控件中“显示”字段值(Model)。ViewModel还可以控制
通过数据绑定到的属性的UI控件状态。视图中的操作通过
挂接到的ViewModel。
这些方法有什么(不明显的)优点和缺点吗?
发布于 2011-05-19 15:35:14
也许你实际上只需要在winforms中将视图作为属性的“展示者”,而在SL中,所有的连接都是通过xaml完成的,这将需要更少的模板。因此,请将视图模型放在公共代码库中,而视图是特定于winforms的。对于ASP.NET来说,这些视图模型事件并不是很好地连接起来,除非你选择丑陋的老式webforms控件和回发。
我真的看不出这两种方法之间的区别,这两种方法都适用于SL。
保持简单。
https://stackoverflow.com/questions/6049948
复制相似问题