エラーが発生しました:
System.Windows.Dataエラー:4:参照'ElementName=gridProductViewDataGrid'でバインドするためのソースが見つかりません。BindingExpression:Path = SelectedItem; DataItem = null; ターゲット要素は'MenuItem'(Name ='');です。ターゲットプロパティは「IsEnabled」(タイプ「ブール値」)です
Visual Studioの[出力]ウィンドウで、私のコードは本来の機能を実行しません。
追加は無効にする必要はありませんが、削除は無効にされていないため、正常に機能します。
<DataGrid AutoGenerateColumns="False" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="False" EnableRowVirtualization="True" ItemsSource="{Binding Items, Mode=TwoWay}" x:Name="gridViewProductDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" >
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="{Binding LabelStrings.AddProductLabel, Source={StaticResource ResourceWrapper}}" Click="Add_Product_MenuItem_Click"/>
<MenuItem Header="{Binding LabelStrings.RemoveProductLabel, Source={StaticResource ResourceWrapper}}" Click="Remove_Product_MenuItem_Click" IsEnabled="{Binding ElementName=gridViewProductDataGrid, Path=SelectedItem, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ObjectToBooleanConverter}}"/>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
コンバーターが単純に取る場合、オブジェクトがない場合はtrueを返し、オブジェクトが存在する場合はfalseを返します。このコードをグリッドの内外に移動したり、バインディングの一部をさまざまな順序で移動したりしてみました。コードを実行してブレークポイントを設定すると、ブールコンバーターのコードには含まれませんでした。グリッド内にあるのになぜグリッドが見えないのですか?