MVVM-Light工具包V4 Beta中的IDataService

时间:2011-10-11 11:56:08

标签: wpf silverlight windows-phone-7 mvvm mvvm-light

我正在学习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只包含一个字符串(或者它意味着用作基类?)。

2 个答案:

答案 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

中解释了这一点

DEEP DIVE MVVM at #MIX11

对模型有一个非常好的解释。

我所做的是用我的onw库替换DataService以通过异步HTTPRequest访问REST模式。 由于异步通信的性质,我决定不使用callback(),所以我删除了它,但是使用消息通过消息的有效负载发回数据。

根据我的理解,你必须使用这些类,因为ViewModel是用IDataService作为参数初始化的,我没有找到任何改变它的方法。

希望它有所帮助。