gpt4 book ai didi

c# - 将可见性绑定(bind)到可检查的菜单项在 WPF 中显示错误 "Service provider is missing the INameResolver service"

转载 作者:太空狗 更新时间:2023-10-29 20:30:58 26 4
gpt4 key购买 nike

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

<Grid>
<DataGrid AutoGenerateColumns="False" Name="dataGrid1">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="Show Column 1" IsCheckable="True"
x:Name="showcol1" IsChecked="True" />
<MenuItem Header="Show Column 2" IsCheckable="True"
x:Name="showcol2" IsChecked="False" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="Col 0" />
<DataGridTextColumn Header="Col 1"
Visibility="{Binding ElementName=showcol1,
Converter={StaticResource BooleanToVisibilityConverter},
Path=IsChecked}" />
<DataGridTextColumn Header="Col 2"
Visibility="{Binding ElementName=showcol2,
Converter={StaticResource BooleanToVisibilityConverter},
Path=IsChecked}" />
</DataGrid.Columns>
</DataGrid>
</Grid>

我什至尝试了其他选项,例如 BindsDirectlyToSource=TrueUpdateSourceTrigger=PropertyChanged。但是,当我选中/取消选中菜单项时,列不会改变它们的可见性。我究竟做错了什么?这在纯 XAML 中真的可行吗?

this问题,答案使用x:Reference。我也试过了,但收到错误

Service provider is missing the INameResolver service.

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

最佳答案

下面是Adam Nathan's WPF 4 unleashed book的解释(推荐大家阅读):

The x:Reference markup extension is often mistakenly associated with the XAML2009 features that can only be used from loose XAML at the time of this writing. Although x:Reference is a new feature in WPF 4, it can be used from XAML2006 just fine as long as your project is targeting version 4 or later of the .NET Framework. One glitch is that the XAML designer in Visual Studio 2010 doesn't properly handle x:Reference, so it gives the following design-time error that you can safely ignore: Service provider is missing the INameResolver service.

无论如何,此消息都可以忽略。对于我的 Visual Studio 2010,它有时出现,有时不出现。

编辑:

我又找到了一个引述(source),但他们没有提供具体的解决方案:

When using {x: Reference } as the Target of a WPF Label, the Visual Studio designer throws an InvalidOperationException exception with the message "Service provider is missing the INameResolver service." The project will compile and execute without any issues, but the Design canvas where the x: Reference appears will be disabled because of the exception. As of this book's writing, this is a known issue and should be resolved sometime in the future.

Here ,作者具体解释了这个问题,并写道将错误报告发送给 Microsoft

BooleanToVisibilityConverter

<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>

DataGrid XAML

<DataGrid AutoGenerateColumns="False" Name="dataGrid1">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem x:Name="showcol1" Header="Show Column 1" IsCheckable="True" IsChecked="True" />
<MenuItem x:Name="showcol2" Header="Show Column 2" IsCheckable="True" IsChecked="False" />
</ContextMenu>
</DataGrid.ContextMenu>

<DataGrid.Columns>
<DataGridTextColumn Header="Col 0" />

<DataGridTextColumn Header="Col 1" Visibility="{Binding Source={x:Reference Name=showcol1}, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}" />

<DataGridTextColumn Header="Col 2" Visibility="{Binding Source={x:Reference Name=showcol2}, Path=IsChecked, Converter={StaticResource BooleanToVisibilityConverter}}" />
</DataGrid.Columns>
</DataGrid>

关于c# - 将可见性绑定(bind)到可检查的菜单项在 WPF 中显示错误 "Service provider is missing the INameResolver service",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com