编辑视图时出现Microsoft Visual Studio XAML UI Designer FileNotFoundException

时间:2016-02-16 19:22:45

标签: c# wpf xaml mvvm

我在Visual Studio 2012上使用WPF和.NET 4.5.2,并在编辑我的视图时在XAML视图中获取FileNotFoundException:

enter image description here

应用程序编译并运行正常。该例外仅显示为蓝色下划线。

我调试了XDesProc.exe,发现这是异常的来源。原因是它的工作目录是C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE所以它在错误的地方寻找配置。

我发现这可能是应用程序中的设计问题。在此行的MainWindowViewModel.cs中抛出异常:

RemotingConfiguration.Configure("ZZZZZ.exe.config", false);

我相信当XAML UI Designer到达我的View.xaml的这一部分时,就会遇到这条线:

<Window.DataContext>
    <vm:MainWindowViewModel/>
</Window.DataContext>

我正在实例化我的ViewModel并将其分配给DataContext。

我想我需要将RemotingConfiguration.Configure()移到我的ViewModel构造函数之外但我不知道放在哪里。我相信这是我问题的解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在设计模式中,实例化xaml中指定的控件和实例。在您的VM(或其他区域)中,可能存在在设计模式期间不应尝试的代码。

最好通过指定是否在设计模式下尝试来分离这些部分,例如

if (!DesignerProperties.GetIsInDesignMode(this)) { ... } // if not in design mode.

由于VM是问题,以下是选项。

  • 在代码后面实例化VM,在设计模式下,不要使用上面的逻辑检查来实例化它。
  • 如果必须在xaml上为宗教原因实例化 ,请按照以下步骤操作。
    1. 通过在Xaml中的VM上添加Name属性,在Xaml中命名VM。
    2. 在名为INotifyPropertyChanged的VM上创建一个布尔值(不必遵守IsInDesign。)
    3. 在主页面构造函数中,检查是否在设计模式下使用上述逻辑,并将该值分配给VM的IsInDesign到指定的VM。
    4. 在VM的构造函数中(应该在Main页面的构造函数之后实例化)检查IsInDesign的值,并根据文件的值停止任何文件的加载/读取。