2009-02-09 13 views
1

Lors de la connexion de Treeview dans Silverlight Toolkit à une source de données, comment accéder à TreeViewItem lui-même pour utiliser sa propriété IsEnabled? Ou perdons-nous cette fonctionnalité et devons-nous la prendre en charge avec n'importe quel modèle hiérarchique personnalisé?Comment désactiver un nœud dans l'arborescence Silverlight?

Si je lie des données à un arbre d'objets personnalisés, comment puis-je accéder à un TreeViewItem individuel pour définir IsEnabled? Idéalement, je veux le faire via la liaison de données. Je me demande si l'utilisation de ItemContainerStyle fonctionnerait? Je pense que je suis un peu confus à propos de la relation entre ItemContainerStyle, ItemTemplate, etc. Evidemment le TreeViewItem est créé pour nous lorsque nous databindons des objets anciens, mais comment définir ses propriétés, en particulier avec une liaison?

Répondre

3

Le véritable problème est que vous ne pouvez pas définir de liaisons sur TreeViewItem qui est automatiquement créé pour chaque objet de base de données utilisant XAML. Les différents ItemsControls, dont TreeView, permettent de remplacer la création de l'élément, par exemple ListBoxItem, TreeViewItem, etc. Vous pouvez définir des liaisons pour les propriétés de ces éléments dans le code.

Classe publique MyTreeView Hérite TreeView

Protected Overrides Sub PrepareContainerForItemOverride(ByVal element As System.Windows.DependencyObject, ByVal item As Object) 

    MyBase.PrepareContainerForItemOverride(element, item) 

    Dim tvi As TreeViewItem = element 
    Dim bindIsEnabled As New Binding("IsEnabled") 
    bindIsEnabled.Mode = BindingMode.OneWay 
    tvi.SetBinding(TreeViewItem.IsEnabledProperty, bindIsEnabled) 

End Sub 

Le crédit va à l'exemple ComboBox à http://www.fret1.com/blog/silverlight-data-binding-enableddisabled-items-on-combobox/

Questions connexes