2013-06-30 9 views
7

コンテキストメニューからデータグリッドの列を表示/非表示しようとしています。私は、このXAMLで、そのためのバインディングを使用しようとしていた:私も、このようなBindsDirectlyToSource=TrueUpdateSourceTrigger=PropertyChangedなど他のオプション、で実験チェック可能なメニュー項目への可視性の表示に、WPFの「サービスプロバイダにINameResolverサービスがありません」というエラーが表示されます

<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> 

。ただし、me​​nuitemをチェック/チェック解除すると、カラムの可視性が変わらない。私は間違って何をしていますか?純粋なXAMLではこれが実際に可能ですか?

this質問では、答えはx:Referenceを使用します。私もそれを試みたがエラーを受けた

サービスプロバイダーにはINameResolverサービスがありません。

GoogleはこれがVS2010のバグだと教えてくれましたか?これを解決するには何ができますか? VS2012に切り替えるのがベストショットですか?ここで

答えて

4

Adam Nathan's WPF 4 unleashed bookからの説明(私は読むことを皆に助言する)である:

X:リファレンスマークアップ拡張機能は、多くの場合、誤っ時に緩いXAMLからのみを使用することができますXAML2009機能と関連していますこの執筆。 x:ReferenceはWPF 4の新機能ですが、プロジェクトが.NET Frameworkのバージョン4以降をターゲットにしている限り、XAML2006からでも使用できます。 1つの不具合は、Visual Studio 2010のXAMLデザイナーがx:Referenceを適切に処理しないため、無視することができる次のデザイン時エラーが発生することです。 サービスプロバイダーにINameResolverサービスがありません。いずれの場合においても

、このメッセージは、を無視することができます。私のVisual Studio 2010のために時々現れることがあります。

EDIT:

私は1つの以上の引用符(source)を見つけましたが、彼らは、特定のソリューションを提供していない:、WPFラベルの対象として:{参考X}を使用している場合

をVisual Studioデザイナーは、 "サービスプロバイダーにINameResolverサービスがありません"というメッセージと共にInvalidOperationException例外をスローします。プロジェクトは問題なくコンパイルされて実行されますが、x:Referenceが表示されるデザインキャンバスは例外のために無効になります。この本の執筆時点では、これは既知の問題であり、将来いつか解決する必要があります。

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>  
+0

。私はそれが到着するまで待たなければならないことを知っていた;)ありがとう! 問題が解決しない限り、デザイナーが作業を拒否したという問題がありました。これを確認して修正する方法がありますか? – CBenni

+0

私はこれが「深刻な」問題ではないと思います。 'Microsoft'はエラーを修正せず、悪化します:)。私が間違っていないと、彼らはエラーのためにそれを認識しなかったので、修正は長い時間待つことができます。私は自分のプロジェクトに 'x:Reference 'を個人的に使用しており、問題は見られません。 –

+1

"InvalidOperationExceptionが 'Reference'にスローされました:サービスプロバイダにINameResolverサービスがありません。詳細については、ここをクリックしてください。デザイナータブに表示されます。それは無効になっているので、私はデザイナーをまったく使用できません。私はプロジェクトが終了するまで参照を削除します – CBenni

関連する問題