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)
我认为到目前为止对这个问题的一些评论有点不公平......是的,这两种技术(ASP.Net MVC和WPF)用于构建完全不同的平台,但是可以在架构之间进行比较(MVC和MVVM)正在每个平台中使用.
在WPF中,您有一个ViewModel,可以将您的模型公开给您的View.在您的示例中,MainViewModel通过FromDate和ToDate属性公开包含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帖子中包含的值填充该模型.然后,该操作可以使用该模型中的值来持久更改或触发某些操作.
所以是的,平台是非常不同的,你需要充分意识到这些差异,但肯定有比较,如上所述.
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |