我正在学习WP7的Silverlight,偶然发现了MVVM Light工具包。我认为学习最新的东西是一个好主意,所以我安装了V4 Beta。可悲的是,它没有任何文件(但是?)。 在Model-Folder中有3个Files,DataItem,DataService和IDataService。
public class DataItem
{
public DataItem(string title)
{
Title = title;
}
public string Title { get; private set; }
}
public class DataService : IDataService
{
public void GetData(Action<DataItem, Exception> callback)
{
// Use this to connect to the actual data service
var item = new DataItem("Welcome to MVVM Light");
callback(item, null);
}
}
public interface IDataService
{
void GetData(Action<DataItem, Exception> callback);
}
MainViewModel使用这些类来获取属性的值。 现在回答这个问题:这些类是你应该使用的(特别是IDataService)吗?我似乎找不到有效使用它们的方法,因为DataItem只包含一个字符串(或者它意味着用作基类?)。
答案 0 :(得分:4)
我已成功使用IDataService来提供测试和虚拟数据挂钩。您拥有的代码是您应该如何使用它的示例。 DataItem是表示来自数据库或服务的数据的“实体”或“DTO(数据传输对象)”的示例。如果您正在使用WCF,那么当您执行“添加服务引用”时,它将是生成的对象。 DataService类是接口的表示。此DataService类将具有调用真实Web服务并执行CRUD操作的方法。您还可以使用具有相同方法的DesignTimeDataService:IDataService,但使用内存中的foreach创建数据。然后,您可以使用IoC或其他依赖注入在运行时注入实现。
在Silverlight的App.xaml.cs中,我创建了一个IDataService并在整个应用程序中使用它:
IDataService ds = ViewModelBase.IsDesignTimeStatic // from the MVVMLight toolkit
? (IDataService) new DesignTimeDataService()
: (IDataService) new DataService();
答案 1 :(得分:0)
MVVM Light提供的结构,以及示例,都被认为是您的应用程序连接到服务。
Laurent在他的视频Understanding the Model-View-ViewModel Pattern
中解释了这一点对模型有一个非常好的解释。
我所做的是用我的onw库替换DataService以通过异步HTTPRequest访问REST模式。 由于异步通信的性质,我决定不使用callback(),所以我删除了它,但是使用消息通过消息的有效负载发回数据。
根据我的理解,你必须使用这些类,因为ViewModel是用IDataService作为参数初始化的,我没有找到任何改变它的方法。
希望它有所帮助。