2011-10-11 82 views
2

我正在学习用于WP7的Silverlight,并偶然发现了MVVM Light工具包。我认为学习最新的东西是个好主意,所以我安装了V4 Beta。可悲的是,没有任何文件(但?)。 在模型文件夹中有3个文件,DataItem,DataService和IDataService。MVVM-Light工具包中的IDataService V4 Beta

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只包含一个字符串(或者它是否被用作基类?)。

回答

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(); 
+0

哦,上帝,我现在觉得很蠢..谢谢。 – SBoss

+1

很高兴能帮到你。不要担心,这就是我们学习的方式。 – Aligned

0

结构提供形式MVVM灯,还有的例子,被认为与您的应用连接到服务。

劳伦特解释说在他的视频Understanding the Model-View-ViewModel Pattern

这里DEEP DIVE MVVM at #MIX11

有模型的一个很好的解释。

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

在我的理解你必须使用这些类作为ViewModels初始化与IDataService作为参数,我还没有找到任何方式来改变它。

希望有所帮助。