2010-03-12 12 views
13

Espero que esto no sea una tontería.Vincula Grid.Row/Grid.Column dentro de un DataTemplate

Me gustaría ser capaz de hacer lo siguiente en XAML: Encuadernaciones

<DataTemplate DataType="{x:Type TestApp:ButtonVM}">   
     <Button 
       Grid.Column="{Binding GridColumn}" 
       Grid.Row="{Binding GridRow}" 
       Content="{Binding Path=Info}" 
     /> 
</DataTemplate> 

El contenido de finos, pero Grid.Column y Grid.Row simplemente no existen en el objeto producido. Ni siquiera cuando los configuré con algún valor sin vinculación (como en Grid.Column = "1"). He fisgoneado la aplicación y vi que dentro de mi cuadrícula nadie configura Grid.Column y Grid.Row.

¿Alguna idea?

+0

¿Cómo le va a sus objetos ButtonVM en la parrilla? The Grid no es un control de elementos y por lo tanto no tomará objetos arbitrarios del modelo de vista como sus elementos secundarios. –

+0

Vea a continuación, logré hacerlo yo mismo. El secreto es usar ItemsControl.ItemContainerStyle y usar Setters allí para inyectar el enlace en el niño con plantilla. – Thorsten79

Respuesta

18

Resuelto yo mismo con la ayuda de los blogs.

Por lo que tengo entendido, usted simplemente no puede hacer la vinculación de la propiedad adjunta en el interior.

A continuación se resuelve el problema en un instante (ItemContainerStyle!):

<DataTemplate DataType="{x:Type TestApp:GridVM}"> 
     <ItemsControl ItemsSource="{Binding Path=Children}"> 
      <ItemsControl.ItemContainerStyle> 
       <Style> 
        <Setter Property="Grid.Row" Value="{Binding GridRow}" /> 
        <Setter Property="Grid.Column" Value="{Binding GridColumn}" /> 
       </Style> 
      </ItemsControl.ItemContainerStyle> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Grid ShowGridLines="True" Style="{Binding Path=Style}"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height=".5*" /> 
          <RowDefinition Height=".5*" />        
         </Grid.RowDefinitions> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width=".5*" /> 
          <ColumnDefinition Width=".5*" /> 
         </Grid.ColumnDefinitions>       
        </Grid> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
     </ItemsControl> 
</DataTemplate> 
+1

Ah sí. Deberias hacer eso. El Grid.Row adjunto necesita ser un hijo inmediato de la grilla. –

+0

Estábamos teniendo muchos problemas al respecto y hemos intentado con muchas otras soluciones y ¡esta fue la única que funcionó! – Garvice

Cuestiones relacionadas