2009-08-14 6 views
0

J'utilise le contrôle de l'arborescence dans mon projet silverlight. J'utilise la liaison de données pour lier mon modèle à l'arbre. Cela fonctionne parfaitement.Silverlight Tree view

Après avoir ajouté quelques fonctionnalités à l'arbre, je suis tombé sur deux problèmes:

  1. Quand je change une propriété sur mon modèle, l'arbre ne soit pas mis à jour, même après mon onProperty changé s'appelle et aussi mon le convertisseur n'est pas appelé? (j'ai besoin de cacher l'article quand une propriété spécifique change) (répondu)

  2. Comment cacher un article dans l'arbre? (J'utilise la zone de texte + image comme modèle d'objet)

  3. panneau de la pile est caché, mais conteneur vide reste dans l'arbre

DataTemplate:

   <common:HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
       <StackPanel Orientation="Horizontal" Visibility="{Binding IsAvailable, Converter={StaticResource ItemVisibleConverter} ,Mode=TwoWay}" > 
        <Image Source="{Binding Converter={StaticResource ImageConverter}}"/> 
        <controls:Label Name="myItem" Content="{Binding Description, Converter={StaticResource ItemConverter} ,Mode=TwoWay}" Foreground="Black"/> 
       </StackPanel> 
      </common:HierarchicalDataTemplate> 

Converter: publique objet Convert (valeur d'objet, type targetType, paramètre d'objet, culture ystem.Globalization.CultureInfo) { return GetVisibility (value); }

 private Visibility GetVisibility(object value) 
    { 
     bool IsVisible= (bool)value; 
     if (IsAvailableForDownload) 
     { 
      return Visibility.Visible; 
     } 
     else 
     { 
      return Visibility.Collapsed; 
     } 
    } 

Modèle

public class MyModel: INotifyPropertyChanged 
{ 
    public bool IsAvailable 
    { 
     get 
     { 
      return _IsAvailableForDownload; 
     } 
     set 
     { 
      _IsAvailableForDownload = value; 
      onPropertyChanged(this, "IsAvailableForDownload"); 
     } 
    } 

//Code for on property changed event 
} 

Cordialement

+0

Pouvez-vous publier le Xaml où vous configurez la liaison de données (HierarchialDataTemplate pour votre arborescence) ainsi qu'une petite partie de la classe Modèle montrant votre implémentation de INotifyPropertyChanged? L'affichage du code du convertisseur aiderait aussi. –

Répondre

0
  1. Vous devez probablement vous assurer que votre model implements INotifyPropertyChanged afin que le système de fixation peut faire son travail.

  2. Pourriez-vous avoir une propriété de type Visibilité à laquelle votre modèle d'élément est lié, ou un bool plus un convertisseur de valeur qui renvoie une valeur de visibilité?

    <DataTemplate> < Visibilité Grille = "{Binding ThisThingsIsVisible}" > < Bouton Contenu = "{Binding Blah}"/> </Grille > </DataTemplate >

I Je ne sais pas si c'est la méthode recommandée ou non - votre objet lié ne peut-il pas exposer des objets cachés dans ses collections?

+0

Salut Jeff, merci beaucoup. INotify a résolu mon premier problème, mais je suis toujours aux prises avec les numéros deux et trois. Aucun conseil? –

+0

En cours d'exécution d'une erreur ou à la recherche de conseils sur l'ajout de la visibilité dans l'objet de données ou le modèle de vue? –