我写了一个简单的WPF应用程序作为例子:
型号:
public class User
{
public String FirstName { get; set; }
public String LastName { get; set; }
}
视图模型:
//ViewModelBase contains base code for INotifyPropertyChanged
public class UserViewModel : ViewModelBase
{
public UserViewModel(User user)
{
_user = user ?? new User();
}
private User _user;
public String FirstName
{
get { return _user.FirstName; }
set
{
if (_user.FirstName != value)
{
_user.FirstName = value;
RaisePropertyChanged("FirstName", "Full Name");
}
}
}
public String LastName
{
get { return _user.LastName; }
set
{
if (_user.LastName!= value)
{
_user.LastName= value;
RaisePropertyChanged("LastName", "Full Name");
}
}
}
public String FullName
{
get { return String.Format("{0}, {1}", LastName, FirstName); }
}
}
我可以在MVC3应用中重用我的代码吗?我认为INotifyPropertyChanged的东西不起作用,但我不能以某种方式重用ViewModel?
答案 0 :(得分:2)
不,不是真的。 ViewModels和Controllers受完全不同的设计模式的约束。
MVVM和MVC的亮点在于它们有助于从代码隐藏中突破业务逻辑。您很可能可以共享您的支持代码(您从VM和控制器调用的代码,但任何以平台为中心的设计都没有涉及的代码)和模型(取决于它们的编码方式)。
我目前正在开发一个结合了MVC网站和WPF应用程序的应用程序,我确实在它们之间共享模型,以及我可以从我的VM和控制器中挤出的代码。但是两者之间存在太大的不同,将VM用作控制器,反之亦然。
答案 1 :(得分:0)
你的'firstname'和'lastname'方法只会移动到模型中,因为它们不仅仅是稍微更加花哨的getter和setter。
你是FullName方法我很想放入控制器,因为它正在处理格式化,但它确实有一种基本的,可测试的逻辑。
正如你所说的,我不确定你是否可以使用NotifyProperty gubbins,但一般来说这些方法应该很快就可以了。