2013-06-13 6 views
0

Je veux créer une relation entre mon TreeView et DataGrid J'ai une méthode appelée SelectedTestElement qui appelle une la méthode SearchGridComment lier la propriété à un TreeView

ViewModel:

 public TestElementViewModel SelectedTestElement 
    { 
     set 
     { 
      if (_selectedTestElement == value) return; 
      this._ selectedTestElement = value; 


      SearchGrid(value.Id, new List< TestElementViewModel>(testElementViewModel.GetAllTreeNodes())); 

     } 
     get 
     { 
      return this._ selectedTestElement; 
     } 

    } 

Je veux lier cette propriété dans mon XAML TreeView

<TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding MessageElements, Mode=TwoWay}" TreeViewItem.Selected="{Binding SelectedTestElement, Mode=TwoWay}" /> 

est-treeView.Selected une meilleure façon de faire l'appel de biens en TreeView?

Edit:

ViewModel:

je sélectionne une treenode-à-dire SelectedTreeNode sera lier à TreeView.SelectedItem

 public TreeNodeViewModel SelectedTreeNode 
    { 
     set 
     { 
      if (_selectedTreeNode== value) return; 
      this._selectedTreeNode = value; 

      //search the treenode id 
      SearchGrid(value.Id, TestFieldVModel.GetAllTestField()); 

     } 
     get 
     { 
      return this._selectedTreeNode; 
     } 

    } 

// faire la recherche et mettre en évidence la grille id correspondant

 public void SearchGrid(int id, ObservableCollection<TestFieldViewModel> msgField) 
    { 
     foreach (var c in msgField) 
     { 
      c.DisplayColor = c.Id == id ? Brushes.DarkOrange : Brushes.Black; 
      c.DisplayFont = c.Id == id ? FontWeights.Bold : FontWeights.Normal; 

      // SearchGrid(id, c.GetAllTestField()); 
     } 
    } 

XAML:

 <TreeView Margin="644,137,6,6" Grid.RowSpan="2" ItemsSource="{Binding TreeNodes, Mode=TwoWay}" TreeView.SelectedItem ="{Binding Path= SelectedTreeNode, Mode=TwoWay}" > 

Répondre

0

Cela ne fonctionnera pas, vous essayez de lier un événement à une propriété sur votre modèle de vue.

Je vous recommande d'utiliser la propriété TreeView.SelectedItem et de la lier à une nouvelle propriété sur votre modèle de vue qui accepte un TreeViewItem. Ensuite, modifiez votre propriété SelectedTestElement pour afficher la nouvelle propriété d'élément sélectionné et déterminez le TestElementViewModel approprié pour renvoyer, ou vous pourriez avoir le set de la nouvelle propriété d'élément sélectionné définir directement `this._selectedTestElement '.

+0

..J'ai mis à jour mon code en fonction de votre suggestion, mais il semble que lorsque j'essaie de le déboguer ne rentrera pas dans cette propriété. –

+0

@AydaSayed Avez-vous activé le débogage de liaison WPF, voir: http://msdn.microsoft.com/fr-fr/library/dd409960.aspx. Je suppose que votre propriété 'SelectedTreeNode' doit être de type' TreeViewItem' et non votre modèle de vue. Et vous aurez besoin d'une deuxième propriété qui renvoie le modèle de vue basé sur le 'TreeViewItem' qui est sélectionné. – CodingGorilla

+0

Gorille Je trouve un moyen de sélectionner un nœud de l'arbre maintenant je veux mettre en évidence une ligne dans ma grille s'il y a un identifiant correspondant à l'arbre. On dirait que la méthode que j'ai n'a pas fonctionné. toute suggestion? –

Questions connexes