GridView,ItemTemplate,C#代码中的DataTemplate绑定

时间:2017-01-29 07:08:21

标签: c# windows xaml windows-runtime win-universal-app

我有以下工作XAML和C#代码:

 <Grid x:Name="MainGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <GridView ItemsSource="{Binding}">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Height="100" Width="150">
                    <Grid.Background>
                        <SolidColorBrush Color="{Binding Color}"/>
                    </Grid.Background>
                    <StackPanel>
                        <StackPanel.Background>
                            <SolidColorBrush Color="{Binding Color}"/>
                        </StackPanel.Background>
                        <TextBlock FontSize="15" Margin="10" Text="{Binding Name}"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
</Grid>

背后的代码:

public MainPage()
{
    this.InitializeComponent();
    var _Colors = typeof(Colors)
        .GetRuntimeProperties()
        .Select(x => new
        {
            Color = (Color)x.GetValue(null),
            Name = x.Name
        });
    this.DataContext = _Colors;
}

这很好用。

但是我想在C#代码后面做所有XAML部分。在XAML中,只有MainGrid,其所有子元素和绑定都需要在后面的代码中完成。

我在MainPage_Loaded事件中尝试了类似的事情:

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    try
    {
        GridView gridView = new GridView()
        {
            ItemTemplate = new DataTemplate
            {
                //Don't know what to add here
            }
        };

        Grid grid = new Grid();
        Binding bindingObject = new Binding();
        bindingObject.Source = this;
        grid.SetBinding(Grid.BackgroundProperty, bindingObject);

        //...
        // Don't know how to add grid inside gridView in Code.
        //...

        MainGrid.Children.Add(gridView);
    }
    catch (Exception ex)
    {

    }
}

1 个答案:

答案 0 :(得分:0)

首先,我建议您不要在代码中创建元素,除非您有充分的理由这样做。

无论如何,考虑到项目模板是用于控件的工厂类对象(您为每个项目生成&#39;一组新的控件)。您可以使用FrameworkElementFactory为子树建模,然后为项目模板分配VisualTree属性。