2009-04-28 7 views
0

J'ai un contrôle utilisateur - disons "ControlBase". Il a la propriété "SomeItems", qui est un ObservableCollection<InheritedFromDO>, où InheritedFromDO est une classe héritée de "DependencyObject".
Lorsque je crée un balisage pour une classe enfant du ControlBase, je voudrais lancer la collection "SomeItems". Mais de toute façon je ne peux pas utiliser les liaisons dans ce balisage, bien que le contrôle ait un DataContext assez normal et que la liaison fonctionne dans des cas normaux.DataBinding échoue pour une propriété de collection de contrôle personnalisé

Il ressemble à ceci:

<local:ControlBase 
    ... 
    > 
    <local:ControlBase.SomeItems> 
    <SomeItem 
     DepPropertyOne={Binding Id} <!-- Does NOT work here --> 
     /> 
    <SomeItem 
     DepPropertyOne={Binding Name} <!-- Does NOT work here --> 
     /> 
    <local:ControlBase.SomeItems> 

    <Grid> 
    <TextBlock 
     Text={Binding Id} <!-- Works here --> 
     /> 
    </Grid> 
</local:ControlBase> 

La sortie dit:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Id; DataItem=null; target element is 'SomeItem' (HashCode=26965808); target property is 'DepPropertyOne' (type 'Object')

Toute idée comment le faire fonctionner?

Répondre

1

En effet, les éléments de la collection ne font pas partie de l'arborescence logique. Vous devez customize the logical children de votre contrôle si vous voulez que cela fonctionne, ou sous-classer un contrôle qui le fait pour vous (par exemple ItemsControl).

+0

Merci Kent, c'est exactement ce dont j'avais besoin. Il semble également résoudre certains problèmes que j'avais avec la résolution des ressources – arconaut

+0

bien que, il fonctionne toujours correctement seulement si les objets sont hérités de FrameworkElement, pas seulement DependencyObject – arconaut

Questions connexes