2009-08-12 21 views
65

Sto cercando di DataBind a questo ItemsControl:Impostazione delle proprietà di tela in un ItemsControl DataTemplate

<ItemsControl ItemsSource="{Binding Path=Nodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

Utilizzando questo DataTemplate, sto cercando di posizionare singolarmente miei Node elementi sulla Canvas correttamente:

<DataTemplate DataType="{x:Type Model:EndNode}"> 
    <Controls:EndNodeControl Canvas.Left="{Binding Path=XPos}" Canvas.Top="{Binding Path=YPos}" /> 
</DataTemplate> 

Tuttavia, non funziona come previsto. Tutti i miei elementi del nodo sono disegnati uno sopra l'altro nella stessa posizione. Qualche suggerimento su come realizzare questo?

risposta

111

Le proprietà associate funzionano solo sui bambini diretti della tela. ItemsControl metterà controlli ContentPresenter come i suoi figli diretti, così si potrebbe desiderare di aggiungere uno stile per quello pure:

<ItemsControl ItemsSource="{Binding Path=Nodes}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style TargetType="ContentPresenter"> 
      <Setter Property="Canvas.Left" Value="{Binding Path=XPos}" /> 
      <Setter Property="Canvas.Top" Value="{Binding Path=YPos}" /> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 

Spero che questo aiuti

+0

Grazie. Ho trovato questa soluzione da solo circa 5 minuti fa. Credo di essere stato un po 'veloce nel pubblicare la domanda. :) – atsjoo

+7

Hehe .. Adoro anche quei momenti AHA;) .. E non è poi così male ... Forse la tua domanda può aiutare anche gli altri un giorno .. Non lo saprai mai! – Arcturus

+0

Lo ha fatto, grazie sia allo – amaca

Problemi correlati