MVVM:IView与数据绑定
我阅读MVVM是为了在我的表示层视图中采用它。理想情况下,我希望对WinForms、ASP.NET和SL使用相同的方法 我遇到了两种不同的方法,我想收集这些方法(可能还有其他方法)的意见: “带接口的视图”以及视图与ViewModel的数据绑定位置 “使用界面查看” 在这种方法中,我们有一个接口IView,它包含: -设置/获取典型字段值的属性 -视图上发生的操作的事件 其工作方式是将IView的具体实现注入到ViewModel中。然后,ViewModel将连接 事件。然后,它还通过属性“推送”和拉取字段值。它还可以通过 这些事件。可以通过IView属性激活和停用控件 视图的具体实现在WinForms中很容易,但不确定其他技术和SL中的“可混合性”MVVM:IView与数据绑定,mvvm,Mvvm,我阅读MVVM是为了在我的表示层视图中采用它。理想情况下,我希望对WinForms、ASP.NET和SL使用相同的方法 我遇到了两种不同的方法,我想收集这些方法(可能还有其他方法)的意见: “带接口的视图”以及视图与ViewModel的数据绑定位置 “使用界面查看” 在这种方法中,我们有一个接口IView,它包含: -设置/获取典型字段值的属性 -视图上发生的操作的事件 其工作方式是将IView的具体实现注入到ViewModel中。然后,ViewModel将连接 事件。然后,它还通过属性“推送”
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控件状态等)
然后,视图使用数据绑定“显示”视图上UI控件中的字段值(模型)。ViewModel还控制
UI控件状态通过数据绑定到的属性。视图中的操作通过
连接到的视图模型
这些方法有什么(不明显的)优点和缺点?也许您实际上只需要在winforms中作为属性的“演示者”查看,而在SL中,所有布线都是通过xaml完成的,这将需要更少的模板。 因此,当视图特定于winforms时,请将视图模型保存在公共代码库中。 对于ASP.NET来说,这些viewmodel事件并不适合连接,除非您使用丑陋的老式webforms控件和回发 我真的看不出这两种方法之间的区别,这两种方法都适用于SL 保持简单