2010-03-12 109 views
13

希望這不是一個騙局。在DataTemplate中綁定Grid.Row/Grid.Column

我希望能夠做到在XAML如下:細

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

內容綁定工作,但Grid.Column和Grid.Row根本就不在生產對象存在。甚至沒有將它們設置爲一些沒有綁定的值時(比如在Grid.Column =「1」中)。我窺探了應用程序,發現在我的網格中沒有人設置Grid.Column和Grid.Row。

任何想法?

+0

你是如何讓你的ButtonVM對象到Grid?網格不是一個項目控件,因此它不會將任意視圖模型對象作爲其子項。 – 2010-03-12 13:33:43

+0

見下文,我設法自己做。祕訣是使用ItemsControl.ItemContainerStyle並在那裏使用Setters將綁定注入模板化的子級。 – Thorsten79 2010-03-12 13:37:15

回答

18

在博客的幫助下自己解決。

據我瞭解,你根本不能做附加的屬性綁定裏面。

下解決了這個問題在瞬間(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

啊是的。這應該做到這一點。附加的Grid.Row需要是網格的直接子節點。 – 2010-03-12 17:08:59

+0

我們在這方面有很多問題,並嘗試了很多其他解決方案,這是唯一一個工作! – Garvice 2013-03-29 02:18:10