Asp.net(MVC)和WPF(MVVM)的比较 - 数据绑定是否相等?

LCa*_*way 1 c# asp.net wpf asp.net-mvc mvvm

我正在考虑从WPF(mvvm)转换到asp.net(MVC).我认为为了理智而绘制asp.net(MVC)和WPF(MVVM)的失败比较可能是有用的.

以下WPF示例的MVC等价物是什么样的?具体而言,我很好奇如何维护UI和应用程序逻辑的分离,或许更重要的是,如果存在等效的数据绑定.两种不同的设计模式将如何实现相同的方案.

视图模型

在视图模型中,您将拥有一个类,视图中的组件也将绑定在该类中.有点像:

namespace solution.ViewModels
{
    public class MainViewModel : BaseViewModel
    {
        private DateTime _fromDate;

        public DateTime FromDate
        {
            get { return _fromDate; }
            set { _fromDate = value; OnPropertyChanged("FromDate"); }
        }

        private DateTime _toDate;

        public DateTime ToDate
        {
            get { return _toDate; }
            set { _toDate = value; OnPropertyChanged("ToDate");}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

BaseViewModel的位置是:

public class BaseViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

视图

<Window .......>
    <Grid>
       <DatePicker SelectedDate = "{Binding ToDate}">
       <DatePicker SelectedDate = "{Binding FromDate}">
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

Sim*_*Fox 5

我认为到目前为止对这个问题的一些评论有点不公平......是的,这两种技术(ASP.Net MVC和WPF)用于构建完全不同的平台,但是可以在架构之间进行比较(MVC和MVVM)正在每个平台中使用.

在WPF中,您有一个ViewModel,可以将您的模型公开给您的View.在您的示例中,MainViewModel通过FromDateToDate属性公开包含from和a to date的模型.然后,视图可以选择随意显示这些值.

在ASP.Net MVC中,你仍然有一个Model和一个View以及连接两者的东西 - 一个Controller.某些HTTP请求在您的控制器上调用的操作负责填充由视图呈现的模型,并作为HTTP响应返回到客户端.

public class MainController : Controller
{
  public ActionResult ShowMeTheModel()
  {
    SimpleModel model = new SimpleModel
    {
      FromDate = DateTime.Today,
      ToDate = DateTime.Today.AddDays(7)
    };

    return View(model);
  }

  [HttpPost]
  public ActionResult UpdateTheModel(SimpleModel model)
  {
    // use the model parameter to persist changes or otherwise        

    return Redirect("ShowMeAllTheModels");
  }
}
Run Code Online (Sandbox Code Playgroud)

并且基本观点

<h2>A Simple Model</h2>

<% using(Html.BeginForm("UpdateTheModel", "Main")) %>
<% { %>

  <table>
    <tr>
      <th>From Date</th>
      <th>To Date</th>
    </tr>
    <tr>
      <td>
        <%= Html.DatePickerFor(model => model.FromDate) %>
      </td>
      <td>
        <%= Html.DatePickerFor(model => model.ToDate) %>
      </td>
    </tr>
  </table>
<% } %>
Run Code Online (Sandbox Code Playgroud)

数据绑定发生在后期 - 非常简单,[HttpPost]带有参数类型的操作SimpleModel将使用HTTP帖子中包含的值填充该模型.然后,该操作可以使用该模型中的值来持久更改或触发某些操作.

所以是的,平台是非常不同的,你需要充分意识到这些差异,但肯定有比较,如上所述.

  • 谢谢西蒙花时间画比较.绝对有助于我从WPF/MVVM角度理解MVC. (2认同)