2012-02-28 4 views
2

다른 노드에서 HierarchicalDataTemplate 및 뷰 모델을 데이터 컨텍스트로 사용하는 TreeView가 있습니다. TreeView.SelectedItem에서 일부 TreeViewItem 속성에 액세스하려고하지만 TreeViewItem이 아닌 뷰 모델 객체를 반환합니다.
선택한 항목에 TreeViewItem 참조를 가져 오는 방법은 무엇입니까?
(필자는 SelectedItemChanged 처리기에서 같은 문제 - 개체를 보낸 사람은보기 모델 - TreeViewItem을 얻는 방법?)
TreeView SelectedItem 반환 형식

이 [A TreeViewItem하지만하지 accessable 한 :-(를 반환하는 트 리뷰 속성 SelectedContainer 있습니다] WFP에 대한 실망스러운 점은 이런 종류의 "세부 사항"에 집착하기 쉽고 쉽고 명백한 해결책이 있어야하는 것처럼 보이지만 ...

+0

가능한 복제본 [WPF의 TreeView에서 선택한 항목의 TreeViewItem 가져 오기] (http://stackoverflow.com/questions/5218364/getting-treeviewitem-for-theselected-item-in-a-treeview -in-wpf) –

답변

1

일단 TreeView를 데이터 컨텍스트를 사용하면 항상 뷰 모델 객체를 다시 가져옵니다. 이벤트에 대한 응답으로 TreeViewItem 객체를 조작하려면 바인딩을 통해 수행해야합니다 (예 : IsExpanded, IsSelected proper). 스타일은 스타일을 사용하여 뷰 모델 속성에 연결될 수 있습니다. 다음 코드는 선택한 트리 항목을 자동으로 굵게 표시하고 앞에서 설명한 속성을 조작/읽을 수있는 뷰 모델 속성에 바인딩합니다.

 <TreeView x:Name="treeEquipment" 
       ItemsSource="{Binding RootEquipment}" 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <EventSetter Event="TreeViewItem.MouseRightButtonDown" 
          Handler="TreeViewItem_MouseRightButtonDown"/> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
       <Setter Property="FontWeight" Value="Normal" /> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FontWeight" Value="Bold" /> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TreeView.ItemContainerStyle> 
+0

감사합니다. 사실, 트리 노드를 선택하지 못하게하려고했습니다. 왜냐하면 여러 셀렉션을 관리하기 때문입니다. 따라서 항상 false를 반환하는 뷰 모델 속성에 바인딩하면 효과가있었습니다. – Ricibob

+0

@Ricibob에, 당신은 실제로 당신의 컨트롤이 바인딩 된 SelectedItem 속성을 사용하여 끝났습니까? (그렇다면, 어떻게? 동일한 보트에 있어요) – Rachael

+1

@ UB3571 아니요. SelectedItem 속성에 액세스하지 못했습니다.하지만 StrayPointer가 제안하고 바인딩 된 뷰 모델 객체에 필요한 TreeViewItem 필드를 "매핑"했으므로 액세스했습니다. 그것들은 뷰 모델 객체를 통해 생성됩니다. – Ricibob

0

제가 설정하려고했던 속성은 여러 셀렉션을 관리하기 때문에 항상 거짓이었던 IsSelected입니다. 상기 뷰 모드에 바인딩 작동에 따라 StrayPointers 조언 :

class TreeNodeViewMode { 
    public bool no_selection { 
     get { return false; } 
     set { RaisePropertyChanged(); } 
    } 
} 

XAML :

<TreeView.ItemContainerStyle> 
    <Style TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="IsSelected" Value="{Binding no_selection, Mode=TwoWay}" /> 
    </Style> 
</TreeView.ItemContainerStyle> 
0

또 다른 방법은 뷰 모델을 얻을 수 TreeView.SelectedItemChanged (달리 전달 TreeViewItem.Selected 이벤트를 처리하는 것입니다 속성의 설정을 할 수 있습니다

TreeViewItem item = e.OriginalSource as TreeViewItem; 

0 예 :)에이를 통해 우리에게 TreeViewItem을 얻을 않습니다
TreeViewItem item = e.OriginalSource as TreeViewItem; 
if (item != null) { 
    item.Focus(); 
    item.IsSelected = false; 
}