Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 使用WCF服务时XAML设计器不工作_Wpf_Wcf_Xaml_Visual Studio 2012_Designer - Fatal编程技术网

Wpf 使用WCF服务时XAML设计器不工作

Wpf 使用WCF服务时XAML设计器不工作,wpf,wcf,xaml,visual-studio-2012,designer,Wpf,Wcf,Xaml,Visual Studio 2012,Designer,我刚开始使用WCF服务执行我的第一步,并编写了一个小WPF应用程序,它显示从WCF服务检索到的数据。我将应用程序分为两个项目:一个项目包含(WPF)UI,另一个项目包含WCF服务客户端 将端点定义从第二个项目的app.config复制到第一个项目(当然是启动项目)的app.config后,应用程序现在正在运行 但是自从我开始使用WCF服务客户端以来,XAML设计器就不再工作了。它始终显示异常: 在ServiceModel客户端配置部分中找不到引用约定“MyContract”的默认终结点元素。这可

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

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

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

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

这与我在将端点定义复制到另一个app.config文件之前得到的异常完全相同。所以我猜XAML设计器没有使用这种配置。有可能修复这种奇怪的行为吗?如果XAML设计器根本不使用WCF(IMHO无论如何也不应该使用WCF),而只使用一些默认数据,对我来说是可以的

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


有什么想法吗?

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

简单的

if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
    return;
}

在访问业务对象之前,让XAML设计器再次工作。

同样,反之亦然;也就是说,通过将服务引用内容移动到'main'app.config,它可以被'child'项目找到。

也有同样的问题

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

步骤1:在xaml中删除:

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

你的XAML对象怎么会调用wcf呢?发布你的代码我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。坦率地说,我现在不明白为什么XAML设计者会调用WCF服务。我使用的是ViewModel,它在构造函数中调用WCF服务。也许XAML设计器构造了一个ViewModel对象?是的,设计器正在运行ViewModel以尝试获取表单的一些数据。参见下面Baldewin的答案,了解解决方法。这是一个很好的实践,可以确保您的属性在设计时进行检查,并可能排除一些模拟数据。与什么相反?你在说什么?
DataContext = new MainViewModel();