: 비주얼 스튜디오의 출력 창 내 코드 나던에서바인딩 발견하지 소스 나 오류를 얻고있다
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=gridProductViewDataGrid'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'IsEnabled' (type 'Boolean')
어떻게해야되는 일을.
추가 기능은 사용하지 않아도되지만 제거가 비활성화되어 있지 않기 때문에 정상적으로 작동합니다.
<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를 반환합니다. 이 코드를 그리드 안팎으로 이동시키고 바인딩 순서를 다른 순서로 이동하려고했습니다. 코드를 실행하고 중단 점을 넣을 때 불리언 변환기의 코드는 사용되지 않습니다. 왜 그리드가 내부에있을 때 그리드를 볼 수 없습니까?
: 40 : BindingExpression을 경로 오류 : 'PlacementTarget'속성이 'object'에 없습니다. ''GridViewProductUserControl '(Name =' ')'. BindingExpression : Path = PlacementTarget.DataContext.SelectedItem; DataItem = 'GridViewProductUserControl'(Name = ''); 대상 요소는 'MenuItem'(Name = ''); target Property is 'IsEnabled'(type 'Boolean') ' – Lainezor
맞아요. MenuItem에서 이것을 설정하고 있다는 것을 눈치 채지 못했습니다. ContextMenu에 대한 RelativeSource로 내 대답을 업데이트했습니다. – Blachshma
Brilliant! 그러나 DataGrid의 SelectedItem 값에 바인딩 할 수 있도록 'DataContext'부분을 삭제해야했습니다.