用于数据绑定的 IntelliSense 不起作用 - 跟进

IntelliSense for Data Binding not working - followup

由于对我的 的回答,我已经在一个简单的测试应用程序中使用了 IntelliSense for Data Binding,现在我正在尝试将我学到的知识应用到我正在工作的实际应用程序中在。我又遇到了我不明白的问题。下面是我的代码片段 - 我不得不更改名称以保护专有信息:

<Page x:Class="MyProject.Views.Pages.MyPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="450"
      xmlns:Converters="clr-namespace:MyProject.Converters"
      xmlns:ViewModels="clr-namespace:MyProject.ViewModels"
      Title="My View"
      SnapsToDevicePixels="True" KeepAlive="True" TextOptions.TextFormattingMode="Display">
    <Page.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
        <Converters:NullToVisibilityConverter x:Key="NullToVisibilityConverter"/>
    </Page.Resources>

    <StackPanel d:DataContext="{d:DesignInstance ViewModels:MyViewModel}">
        <!-- ... -->
    </StackPanel>
</Page>

我在 <StackPanel d:DataContext="{d:DesignInstance ViewModels:MyViewModel}">:

行收到一条错误消息

The name "MyViewModel" does not exist in the namespace "clr-namespace:MyProject.ViewModels".

错误没有意义 MyViewModel 确实存在于 MyProject.ViewModels 命名空间中。 有什么建议么?我尝试了干净的重建。

MyProject.ViewModels 命名空间与 MyProject.Views.Pages 在不同的程序集中,似乎有必要将 ;assembly=MyProject.ViewModels 添加到 xmlns:ViewModels="clr-namespace:MyProject.ViewModels 声明中:

xmlns:ViewModels="clr-namespace:MyProject.ViewModels;assembly=MyProject.ViewModels"

我假设因为项目引用了程序集,所以我不需要指定程序集,就像在 C# 代码文件中使用命名空间时不必指定程序集一样。

我刚遇到同样的错误,而且我之前遇到过很多次。每次出现此错误时,都是因为我有其他错误,并且我的代码由于其他原因无法编译。一旦我修复了所有其他错误,我的代码就会编译并且 VisualStudio 会找到所有 'd:' 缺失的引用...如果它们确实存在的话。

此外,作为替代方案,如果您使用默认构造函数实例化您的 ViewModel,我建议使用类似的东西(不使用 'd:'):

...
</Page>
<Page.DataContext>
    <ViewModels:MyViewModel/>
</Page.DataContext>

它将永远解决您的问题。

我还没有尝试过,但也许使用 Roslyn(新的 VS2015 编译器)这个问题会消失。我希望 :-)