Привязать Grid.Row / Grid.Column внутри шаблона данных - PullRequest
14 голосов
/ 12 марта 2010

Надеюсь, это не дурак.

Я хотел бы иметь возможность сделать следующее в 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.

Есть идеи?

1 Ответ

20 голосов
/ 12 марта 2010

Решил сам с помощью блогов.

Насколько я понимаю, вы просто не можете выполнить привязку прикрепленного свойства внутри.

Следующее решает проблему мгновенно (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>
...