전적으로 MVVM을 기반으로하는 응용 프로그램에서 작업하고 있습니다. 나는 바인딩 문제에 직면하고있다.바인딩에서 WPF 부모 자식 관계
ListView 바인딩은이 코드에서 절대적으로 잘 작동하지만 MenuItem 명령 바인딩에서는 문제가 발생합니다. 누군가 내가 여기서 잘못하고있는 것을 설명 할 수 있습니까?
전적으로 MVVM을 기반으로하는 응용 프로그램에서 작업하고 있습니다. 나는 바인딩 문제에 직면하고있다.바인딩에서 WPF 부모 자식 관계
ListView 바인딩은이 코드에서 절대적으로 잘 작동하지만 MenuItem 명령 바인딩에서는 문제가 발생합니다. 누군가 내가 여기서 잘못하고있는 것을 설명 할 수 있습니까?
가의 ContextMenu에 조상을 연결할 수있는 ListView에 태그를 넣어 :
<ListView ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.CurrentSecurityList}"
Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" Command="{Binding PlacementTarget.Tag.DataContext.RemoveSecurity, RelativeSource={RelativeSource
AncestorType=ContextMenu}}"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
감사합니다. 왜 이런 식으로 태그를 정의해야하는지 설명해 주시겠습니까? –
MenuItem은 ContextMenu의 PlacementTarget을 통해 ListView를 찾을 수 있습니다. 그러나 더 이상 찾을 수 없습니다. Command 바인딩의 소스 객체가 ListView에없는 경우 (사용자의 경우 ListView의 조상의 DataContext에 있음), Bridge와 같이 Tag를 사용해야합니다. –
확인. 그것은 꽤 분명했습니다. 답장을 보내 주셔서 감사합니다. –
ContextMenu
은 다른 시각적 트리에서 작동하므로 그렇게 바인딩 할 수 없습니다. ContextMenu
조상을 찾고 명령을 검색하려면 PlacementTarget.DataContext
을 참조해야합니다.
<MenuItem Header="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ContextMenu}},Path=PlacementTarget.DataContext.RemoveSecurity}"/>
"하지만 문제가 온다"도움이되지 않습니다, 무슨 문제가 이런 식으로 뭔가를 시도? 바인딩 문제에 대해서는 Visual Studio의 "출력"창을보고 바인딩 오류를 복사/붙여 넣기하십시오. – ken2k
ContextMenu 바인딩은 잘 알려진 경우입니다 -이 게시물을 다른 많은 사람들과 같이 확인하십시오 http://stackoverflow.com/questions/1013558/elementname-binding-from-menuitem-in-contextmenu – sll
참조로 바인딩 할 원본을 찾을 수 없습니다 ' RelativeSource FindAncestor, AncestorType = 'System.Windows.Controls.UserControl', AncestorLevel = '1' '입니다. BindingExpression : Path = DataContext.RemoveSecurity; DataItem = null; 대상 요소는 'MenuItem'(Name = ''); 대상 속성이 'Command'(유형 'ICommand')입니다. –