2010-11-11 7 views
0

J'ai la liste des éléments dans ma classe de données:Silverlight. étrange problème avec la liaison

public ObservableCollection<Node> NodesFromDatabase 
    { 
     get 
     { 
      if (_nodesFromDatabase == null) 
       _nodesFromDatabase =GenerateMenuNodes(); 
      return _nodesFromDatabase ; 
     } 
     set 
     { 
      _nodesFromDatabase = value; 
     } 
    } 

et des biens dans le contrôle auquel je veux lier ces données:

 public ObservableCollection<Node> Nodes 
     { 
      get { return (ObservableCollection<Node>)GetValue(NodesProperty); } 
      set 
      { 
       SetValue(NodesProperty, value); 
      } 
     } 

     private static DependencyProperty NodesProperty = 
    DependencyProperty.Register(
     "Nodes", 
     typeof(ObservableCollection<Node>), 
     typeof(Control),new PropertyMetadata(new ObservableCollection<Node>())); 

En XAML i ont un tel code:

<Grid Background="White"> 
    <Grid.DataContext> 
     <local:DataFromDataBase x:Name="database" /> 
    </Grid.DataContext> 


    <local:Control Nodes="{Binding NodesFromDatabase}" />     
</Grid> 

Et j'ai une étrange logique derrière ce code.

Ma propriété NodesFromDatabase est déclenchée dans l'instruction get mais l'instruction set Nodes de contrôle ne se déclenche pas! Qu'est-ce que je fais mal avec?

Répondre

3

Les propriétés de dépendance définies dans XAML peuvent ignorer l'encapsuleur CLR. Vous devez créer un rappel de modification de propriété dans les métadonnées de propriété si vous voulez savoir quand la propriété est modifiée.