2010-08-02 3 views
1

J'ai un modèle d'élément avec image et bloc de texte. Et textblock lié à la propriété Name. Tout fonctionne bien alors que je n'essaie pas de mettre à jour mes données. Quand je mets à mon nouveau nom de noeud de source dans l'arbre je vois l'ancien nom. Comment mettre à jour le texte à l'intérieur du modèle d'élément?Liaisons de mise à jour Silverlight

<my:TreeView.ItemTemplate> 
     <toolkit:HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="{Binding Icon}" Width="20" Height="20" /> 
       <TextBlock Text="{Binding Name}" Height="20" TextAlignment="Center" HorizontalAlignment="Center" /> 
      </StackPanel> 
     </toolkit:HierarchicalDataTemplate> 
    </my:TreeView.ItemTemplate> 
+0

L'ajout d'une nouvelle propriété est la seule façon de changer mes données de contrôle ??? Puis-je utiliser une méthode comme refreshBinding(); ou des données d'actualisation personnalisées? – Evgeny

Répondre

2

Votre classe avec la propriété Name doit mettre en œuvre l'interface System.ComponentModel.INotifyPropertyChanged pour notifier à l'interface utilisateur WPF que la valeur d'une propriété a été modifiée. Quelque chose comme ce qui suit:

class MyClass : System.ComponentModel.INotifyPropertyChanged 
{ 
    private String _name; 
    public String Name 
    { 
     get { return _name; } 
     set { _name = value; RaisePropertyChanged("Name"); } 
    } 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    protected void RaisePropertyChanged(String propertyName) 
    { 
     System.ComponentModel.PropertyChangedEventHandler temp = PropertyChanged; 
     if (temp != null) 
     { 
      temp(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
2

Votre propriété Name ressemble ressemble probablement quelque chose comme ceci: -

public class MyClass 
{ 
    public string Name {get; set; } 
} 

Cependant, vous avez besoin d'un moyen d'informer l'interface utilisateur qu'une propriété a changé de sorte que l'interface utilisateur peut se mettre à jour . Tel est l'objet de l'interface INotifyPropertyChanged: -

public class MyClass : INotfyPropertyChanged 
{ 
    string _name; 
    public string Name 
    { 
     get {return _name; } 
     set { _name = value; NotifyPropertyChanged("Name"); } 
    } 

    private void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)) 
    } 
    public event PropertyChangedEventHandler PropertyChanged 
} 

Avec cette interface implémentée la liaison mettra à jour la valeur dans l'interface utilisateur chaque fois que la propriété liée est modifiée.

1

attribuez la valeur "Name" en tant que propriété de dépendance. Il a intégré la fonctionnalité de changement de notification.

+2

Ne fonctionne que si l'objet lié est un FrameworkElement. –