将可见性绑定到可检查菜单项会在WPF中显示错误“服务提供程序缺少INameResolver服务”

我试图通过上下文菜单显示/隐藏数据网格的列。 我试图使用绑定,使用此XAML:

               

我甚至尝试过其他选项,例如BindsDirectlyToSource=TrueUpdateSourceTrigger=PropertyChanged 。 但是,当我选中/取消选中菜单项时,列不会更改其可见性。 我究竟做错了什么? 这在纯XAML中实际上是否可行?

在这个问题中,答案使用x:Reference 。 我也尝试了但收到了错误

服务提供商缺少INameResolver服务。

Google告诉我这是VS2010中的一个错误? 我该怎么做才能解决这个问题? 或者是我最好的切换到VS2012?

以下是Adam Nathan's WPF 4 unleashed book的解释(我建议大家阅读):

x:引用标记扩展通常与XAML2009function错误关联,这些function只能在撰写本文时从松散的XAML中使用。 虽然x:Reference是WPF 4中的一个新function,但只要您的项目针对.NET Framework的版本4或更高版本,就可以在XAML2006中使用它。 一个小故障是Visual Studio 2010中的XAML设计器无法正确处理x:Reference,因此它提供了以下设计时错误,您可以放心地忽略:服务提供程序缺少INameResolver服务。

在任何情况下,都可以忽略此消息。 对于我的Visual Studio 2010 ,它有时会出现,有时不会出现。

编辑:

我发现了另一个引用( 来源 ),但他们没有提供具体的解决方案:

使用{x:Reference}作为WPF标签的目标时,Visual Studio设计器会抛出InvalidOperationExceptionexception,并显示消息“服务提供程序缺少INameResolver服务”。 该项目将编译和执行没有任何问题,但由于exception,将禁用出现x:Reference的设计canvas。 在本书撰写时,这是一个已知问题,应该在将来的某个时候解决。

在这里 ,作者专门解释了这个问题,并写了将错误报告发送给Microsoft

BooleanToVisibilityConverter

    

DataGrid XAML