使用WCF服务时,XAML设计器不起作用

时间:2012-12-27 20:04:29

标签: wpf wcf xaml visual-studio-2012 designer

我刚刚开始使用WCF服务执行我的第一步,并构建了一个显示从WCF服务检索的数据的WPF应用程序。我将应用程序拆分为两个项目:一个包含(WPF)UI的项目和一个包含WCF服务客户端的第二个项目。

将端点定义从第二个项目的app.config复制到第一个项目的app.config(当然是StartUp项目)后,应用程序正在运行。

但是自从我开始使用WCF服务客户端以来,XAML设计器就不再起作用了。它总是显示异常:

在ServiceModel客户端配置部分中找不到引用合同“MyContract”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。

这与将端点定义复制到另一个app.config文件之前的异常完全相同。所以我猜XAML设计师不使用这种配置。是否有可能解决这种奇怪的行为?如果XAML设计师根本不使用WCF(它不应该做恕我直言)并且只使用一些默认数据,那对我来说没问题。

我已经考虑过使用RhinoMocks在 DesignerMode 案例中存根WCF服务客户端,但是对异步WCF调用进行存根并不是最简单的事情。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我发现了如何避免这个问题:如果我在业务对象上调用任何东西,而且从ViewModel的构造函数(在主窗口的XAML中定义为DataContext)进行WCF通信,那么XAML设计器似乎不起作用。文件)。

一个简单的

if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
    return;
}
在访问业务对象之前,

使XAML设计器再次工作。

答案 1 :(得分:0)

此外 - 相反的工作;即,通过将服务引用内容移动到'main'app.config,可以通过'child'项目找到它。

答案 2 :(得分:0)

有同样的问题。

我的解决方案是将视图模型分配从xaml移动到.cs代码文件。

第1步:删除你的xaml:

<Window.DataContext>
    <viewModel:MainViewModel/>
</Window.DataContext>

第2步:在.cs代码文件中添加到窗口构造函数:

DataContext = new MainViewModel();