我对Silverlight有点陌生,我有一个解决方案,它有一个提供远程服务的web项目(webApp)和两个使用这些服务的客户端应用程序( client -1和client-2)。
我已经在client-1中创建了一个复杂的用户控件,该控件可以查看/编辑从webApp检索的对象,并且我希望在client-2中重用该控件。
问题是,当您从客户端应用程序引用服务时,类型是“本地类型的”。例如,在客户端-1应用程序中,定义在MyClass中的webApp变成了client-1。在client-2应用程序中使用完全相同的对象(引用),它现在是client-2.2.MyClass类型
如果我创建一个库来承载我的控件,我将不得不添加一个对web服务的引用,并且我将有第三种类型,lib.MyClass。我们都知道client-1、1.MyClass、client-2、1.MyClass和lib.MyClass都是从web.MyClass生成的完全相同的类,但是我找不到解决这个问题的方法。
我目前正在考虑在每个客户端应用程序中共享用户控件的源代码,并在每个项目中定义预处理器,以便在我的用户控制代码文件中这样做:
#if CLIENT-1
using Client-1.WebAppServiceReference
#end if
#if CLIENT-2
using Client-2.WebAppServiceReference
#end if然后,使用MyClass类型的方法在每个客户端应用程序中使用正确的“本地类型”。但是我遇到了问题,因为xaml中没有预处理器功能,而且有一个对应用程序名称空间的引用,我需要有条件。
有一个更容易的方式重复使用控制的银光项目,不是吗?我不可能在每个项目中拥有该控件源文件的两个副本!
谢谢!
发布于 2014-10-24 22:02:35
有几个选项允许您跨Silverlight项目/WCF服务代理使用共享实体类。
如果使用上述任何一个创建DataContract类,然后从WCF和Silverlight客户端项目引用库,那么自动生成的代码将使用对这些共享类的引用(而不是本地自动生成的类)。这应该允许您在项目之间重用Silverlight UserControls。
这两种方法的不同之处在于。如果使用第一个方法(RIA项目),那么当您创建名为"SomeEntityClass.shared.cs“的文件时,".shared”将告诉Visual将该文件的副本放置在镜像Silverlight项目中。第二种方法(PCL)是一种较新的方法--它允许您创建能够针对多个平台(.Net、Silverlight、Windows,.)的类库,并减少了一组核心.NET库。
发布于 2014-10-25 19:34:09
我建议您将XAML和图形化的内容从任何业务逻辑中分离出来,等等。MVVM是一个非常好的模式。之后,您可以使用Visual "Add“的非常有用的功能引用第二个项目中的UserControl,在这里您可以这样做:

对于底层业务,您可以将其用于两个项目,并将这两个项目连接起来。
希望它能帮上忙
https://stackoverflow.com/questions/26556387
复制相似问题