2012-10-12 1 views
0

TreeViewItem 개체의 클릭하면 하위 항목
TreeViewItems의에 --- 내가</p> <p>-root <br> --Item <br> 과 MVVM 패턴 트 리뷰를 구축

을 데이터에 액세스하는 방법을 나는 것 실제 오브젝트 (모델)의 세부 사항을 별도의 창에 표시하려고합니다.

하지만 개체의 데이터에 액세스하는 방법을 모르겠습니다. 당신의 ViewModel에서

private void TreeView_OnSelectedItemChanged(object sender, RoutedEventArgs e) 
{ 
    TreeViewItem tvi = e.OriginalSource as TreeViewItem; 
    MessageBox.Show(tvi.ToString()); 
} 
+0

어떻게 지내세요? 너 스스로 할 방법을 알아 냈어? – Simon

답변

4

MVVM 스타일의 WPF 응용 프로그램에 TreeView_OnSelectedItemChanged을 사용하지 않는 것이 좋습니다.

ModelView에에 정의하는 것은이 TreeeViewItemIsSelected 속성에 바인딩하고 항상 선택의 인식, 노스 다코타뿐만 아니라, 코드에서 관심있는 항목을 선택할 수 있습니다 줘야 바인더 제본.

+0

+1 제가 사용하는 접근 방식입니다. 물론이 속성을 테스트하지 않는 한 약간의 코드가 문제가되지 않습니다. –

+0

그래서 개별 아이템들은'IsSelected' 상태를 유지하고'ViewModel'은 무언가를 사용하여 무엇이 선택되었는지를 알 수있는 항목에서'IsSelected'를 변경합니다. – Simon

+0

@ 사이먼 : 데이터 바인딩을 사용하면 트리 뷰를 채 웁니다. 그래서 모든 TreeViewItem 하나의 개체, 하나의 modelview 개체에 연결됩니다. treeviewitem의 IsSelected 속성을 modelview의 속성에 바인딩하면 사용자가 어떤 항목을 선택했는지보기 위해 modelview objects 컬렉션을 스크롤하고 IsSelected == true 인 항목을 찾으면 충분합니다. – Tigran

0

는 입력 TreeViewItem의 종속성 속성을 만들고,보기에 새 종속성 속성에 트 리뷰의 SelectedValuePath 속성을 바인딩합니다.

+1

ViewModel을 완전히 건너 뛸 수 있으며, ElementName 바인딩을 사용하여 트리 뷰에서 'SelectedItem'에 직접 바인딩 할 수 있습니다. 이는 'SelectedItem'을 삽입 할 수없는 이유가있을 경우 유용한 옵션입니다. ViewModel에서 type 속성을 사용하거나 (예 : elses VM을 사용하여 관리 할 권한이없고 항목을 노출하지 않은 경우) - 예 '' – Charleh

+0

'TreeView'의'SelectedItem' 속성을 바인드 할 수 없습니다. – Simon

+0

단방향 바인딩은 읽기 전용 속성이므로 사용해야 할 수 있습니다. – PhonicUK

0

MVVM 패턴에서 컨트롤과 연결된 데이터는 DataContext 종속성 속성에 있어야합니다.

4

이전 질문에 대한 답은 무엇보다 많이 제기되었습니다.

TreeViewItem의 바운드 개체의 세부 정보를 표시하여 TreeView에서 변경하는 선택에 반응하려면 Caliburn MicroAction 메커니즘을 사용할 수 있습니다. TreeView의 SelectedItemChanged 이벤트를 ViewModel의 메서드에 연결할 수 있습니다. 보기에 예를 들어

:

<TreeView 
    ItemsSource="{Binding YourDataObjects}" 
    cal:Message.Attach="[Event SelectedItemChanged] = [Action OnSelectedItemChanged($this)]"/> 

와의

당신의 ViewModel이 방법이됩니다 : 당신이 알려 문제점이 설정이있는 경우

public void OnSelectedItemChanged(YourDataObject selectedItem) 
{ 
    //Do something with the selected item here 
} 

합니다.

+0

코드로 멋진 답변! 그렇게하는거야! – juFo