2010-03-27 6 views
0

ContextMenu를 연결하는 TreeView가 있습니다. 해당 컨텍스트 메뉴에는 IsChecked 속성이 내 ViewModel에 바인딩하려는 항목이 있습니다. 트리를 사용하기 때문에 각 트리 항목은 내 ViewModel의 하위 속성에 바인딩됩니다.WPF Treeview 컨텍스트 메뉴 IsChecked 바인딩 MVVM

BindingExpression 경로 오류 : '객체' ''HostMgmtViewModel '(해시 코드 = 12565727)'를 찾을 수 없습니다 'IsAutoStart'의 property VS2010 출력 창에서

나는이 데이터 바인딩 오류를보고하고있다. BindingExpression : Path = IsAutoStart; DataItem = 'HostMgmtViewModel'

이것은 분명히 트리 모델의 관련 데이터가 아니라 내 ViewModel에 바인딩하려는 것을 보여줍니다. 올바른 개체에 어떻게 바인딩합니까? 내 contextmenu가 특정 treeitem이 아닌 전체 TreeView와 연관되어 있음을 기억하십시오.

{Binding Path=PlacementTarget.SelectedItem.IsDisabledStart, Mode=OneWay, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}} 

답변

3
<TreeView Name="tview" Grid.Row="0" Tag="{Binding RelativeSource={RelativeSource Self}, Path=SelectedItem}"> 
     <TreeView.ContextMenu> 
      <ContextMenu> 
       <MenuItem Name="miC" Header="{Binding Path=Tag.Key}" DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"></MenuItem> 
      </ContextMenu> 
     </TreeView.ContextMenu> 
    </TreeView> 

이를 : xandy 내 문제에 대한 해결책 아래에 지적

---------- 편집

으로이 같은의 IsChecked을 결합했다 내가 가지고있는 작업 코드 스 니펫입니다. [this]의 호의. 1 필요한 것은 태그의 바인딩 경로를 변경하는 것입니다. 나는 현재 Treeview를 사전에 바인딩하고 있으므로 키 속성이됩니다. 개체 컬렉션에 바인딩하는 데 문제가 없어야합니다. 흥미로운 사실은 컨텍스트 메뉴가 요소 트리의 일부가 아니기 때문에 문제가 발생한다는 것입니다. 문제없이 텍스트 상자를 바인딩 할 수 있습니다.

<TextBlock Grid.Row="1" DataContext="{Binding ElementName=tview, Path=SelectedItem}"> 
     <TextBlock.Text> 
      <Binding Path="Key" /> 
     </TextBlock.Text> 
    </TextBlock> 

하지만 같은 것을 넣으면 menuitem의 경우 작동하지 않습니다.

+0

그리고이 바인딩은 ContextMenu 안에 들어갑니다. 이 오류가 발생하면 '바인딩'을 'ItemCollection'컬렉션에서 사용할 수 없습니다. 'Binding'은 DependencyObject의 DependencyProperty에서만 설정할 수 있습니다. – BrettRobi

+0

BTW, 내 이전 대답은 위의 텍스트 블록 예제처럼 할 수 있지만 menuitem 헤더에 적용됩니다. 메뉴 항목에 오류가 없지만 작동하지 않습니다. 당신은 DependencyObject를 얻습니다 ... 당신이 데이터 소스에 바인딩하고 있지만 속성은 아닙니다. – xandy

+0

감사합니다 xandy, 샘플이 저에게 정확한 답을주었습니다. 나는 메뉴 항목 IsChecked를 다음과 같이 바인딩했다 : {바인딩 경로 = PlacementTarget.SelectedItem.IsAutoStart, 모드 = OneWay, RelativeSource = {RelativeSource AncestorType = {x : 유형 ContextMenu}}} – BrettRobi

관련 문제